Hallo zusammen
Bei folgendem Code möchte ich, wenn das Erstellen der Ordner schief geht, diese wieder löschen.
Nun kann es bei meiner Aufräum Aktion im catch Block wieder zu einer Exception kommen.
Wie wird das in diesem Fall gehandhabt? Ich will keine halb erstellte Ordnerstruktur haben. Entweder werden alle erstellt oder gar nichts.
public static void Struktur(String Pfad)
{
DirectoryInfo deltaV = null;
try
{
ReSPC_Data set = new ReSPC_Data();
deltaV = new DirectoryInfo(Path.Combine(Pfad, "DELTAV"));
deltaV.Create();
set.Strukturpfad = deltaV.FullName;
deltaV.CreateSubdirectory("Operations");
deltaV.CreateSubdirectory("Enums");
deltaV.CreateSubdirectory("Procedures");
deltaV.CreateSubdirectory("Unitprocedures");
}
catch
{
if(deltaV != null)
deltaV.Delete(true);
throw;
}
}
Wie das vorgehen, wenn Code im Catchblock, auch eine Exception auslösen kann.
Danke und Gruss
Lothi
Hallo Lothi,
du kannst im Catch-Block natürlich wieder ein try-catch einbauen.
Allerdings gibt es sowieso keine Möglichkeit, das gewünschte in allen Fällen sicherzustellen. Nimm einen Wechseldatenträger, der hart abgezogen wird, oder ein korruptes Dateisystem oder einen Stromausfall oder ...
herbivore
Naja dachte ich mir fast.
Ich werde das mit einer Eigenschaft machen, die auf korrupt gestellt wird, wenn die Struktur nicht mehr Rückgängig gemacht werden konnte.
So kann ich, bevor das nächste Mal Daten in den Ordner gespeichert werden sollen, dem Benutzer melden, dass der vorhandene Speicherort korrupt ist.
catch
{
try
{
if(deltaV != null)
deltaV.Delete(true);
set.Korrupt = false;
throw;
}
catch
{
set.Korrupt = true;
throw;
}
}
Irgendsowas in der Art. Ich weiss bin ein halt ein bastler.
Gruss Lothi
Ich würd da keine verschachtelten try-catch einbauen, das wär mir zu kompliziert.
Merk dir welche Ordner du schon erstellt hast. Wenns schief läuft, versuch die der Reihe nach wieder zu löschen. Wenn das nicht geht, Meldung an den User. Die wird ja wahrscheinlich sowieso kommen wenn das Erstellen nicht geklappt hat.
So oft wird das nicht vorkommen, dass irgendwas mittendrin abbricht. Und wenn, ists wie herbivore schon sagt eh zu spät um noch ein sinnvolles Ergebnis zu erwarten.