Laden...

Wie vorgehen, wenn Code im Catchblock, auch eine Exception auslösen kann?

Erstellt von Lothi vor 12 Jahren Letzter Beitrag vor 12 Jahren 1.096 Views
Lothi Themenstarter:in
344 Beiträge seit 2006
vor 12 Jahren
Wie vorgehen, wenn Code im Catchblock, auch eine Exception auslösen kann?

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

49.485 Beiträge seit 2005
vor 12 Jahren

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

Lothi Themenstarter:in
344 Beiträge seit 2006
vor 12 Jahren

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

C
2.121 Beiträge seit 2010
vor 12 Jahren

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.