Read Attrubutes



  • hallo ich habe dieses Programm zum lesen der Attribute in einem anzugebenden ordner geschrieben und wollte wissen was ihr davon haltet. Also was hätte ich besser machen können und vor allem wie.

    code:

    using System;
    using System.IO;
    
    public class Programm
    {
        public static void Main()
        {
            for (; ; )
            {
                Console.Clear();
            Point:
                try
                {
                    Console.Write("Den Ordnerpfad eingeben: ");
                    string b = Console.ReadLine();
                    foreach (string a in Directory.GetDirectories(@b))
                    {
                        FileInfo fs = new FileInfo(a);
    
                        DirectoryInfo dir = fs.Directory;
    
                        if (dir.Exists)
                        {
                            Console.WriteLine(dir.Attributes.ToString());
                        }
                    }
                }
                catch (Exception e)
                {
                    Console.WriteLine("Pfad nicht gefunden!");
                    goto Point;
                }
                Console.ReadKey(true);
                Console.Clear();
                Console.WriteLine("Programm neu starten? j/n: ");
                string c = Console.ReadLine();
                if (c != "j")
                {
                    break;
                }
            }
        }
    }
    


  • hmmm bevor ihrs sagt mir ist bereits aufgefallen das ich mir das e bei der Exception und das if(dir.Exists) sparen hätte können 😉



  • Also auf jedenfall das goto raus.
    Wenn eine Exception kommt dann hat das schon seinen Grund, dann solltest du nicht wieder zum Anfang des Programms springen, sondern eventuell das Programm beenden.
    Oder du baust eine Funktion die für das Abfragen des Pfades ist und diese wird aufgerufen wenn zum Beispiel der Pfad nicht gefunden wurde.



  • der Code implementiert das Anti-Pattern: Expection handling (http://en.wikipedia.org/wiki/Expection_handling)

    Begründung: Bei einer Usereingabe ist es eine zu erwartender Zustand das z.B. aufgrund von Fehleingabe der eingegebene Pfad nicht existiert. Eine Exception dagegen sollte unerwartete Zustände behandeln.

    Anstelle dessen sollte die Usereingabe auf Korrektheit geprüft werden (Directory.Exists() ) und dann abhängig davon der Programmfluß entweder seine Ausgabe oder eine Fehlermeldung produzieren.

    Und ja, goto hat hier auch gar nichts verloren. (Nein, das ist keine goto-is-evil Diskussion, obwohl ich das supporte, sondern einfach die Aussage das bei sauberere Programmführung ein goto überflüssig wäre.

    Anstelle von for(;;) würde ich in dem Fall while(true) benutzen.

    Variablennamen sind zu kurz. b, a, c, fs... Keine Angst, Code wird nicht langsamer wenn man die Variablen vernünftig bezeichnet. Jedoch wird er auf dauer schwerer zu lesen, wodurch die Chance auf Fehler vergrößert wird.

    Hmm, immer Komisch wenn der Code-Review mehr Zeilen hat als der Code to Review...


Anmelden zum Antworten