Hi
ich habe versucht mein Programm auf dieses Model umzubauen - klappt auch soweit
Meine Klasse (kleiner Schreibfehler in der Liste

):
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| public class MyDirectory { public string Dateiname; public string Typ; public string Status; public string Bearbeiter; public bool Finished; public string letzteAenderung; public IList<MyDirectory> SubDiretories; } |
rekursive Funktion:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51:
| private void OrdnerAbbilden(string Ordner, MyDirectory ParentDirectory) { string[] strOrdnerInhalt = Directory.GetFileSystemEntries(Ordner); foreach (string s in strOrdnerInhalt) { if (!s.Contains("tools")) { if ((File.GetAttributes(s) & FileAttributes.Directory) == FileAttributes.Directory) { MyDirectory ChildDirectory = new MyDirectory(); ChildDirectory.Dateiname = s; ChildDirectory.Typ = "Ordner"; ChildDirectory.Status = ""; ChildDirectory.Bearbeiter = ""; ChildDirectory.letzteAenderung = DateTime.UtcNow.ToString(); OrdnerAbbilden(s, ChildDirectory); ParentDirectory.SubDiretories.Add(ChildDirectory); } else { MyDirectory ChildDirectory = new MyDirectory(); ChildDirectory.Dateiname = s; switch (Path.GetExtension(s)) { case ".p": ChildDirectory.Typ = "Procedure"; break; case ".w": ChildDirectory.Typ = "Window"; break; case ".bmp": ChildDirectory.Typ = "Bitmap"; break; case ".jpg": ChildDirectory.Typ = "Jpeg-Bild"; break; case ".i": ChildDirectory.Typ = "Include"; break; default: ChildDirectory.Typ = "Datei"; break; } ChildDirectory.Status = ""; ChildDirectory.Bearbeiter = ""; ChildDirectory.letzteAenderung = DateTime.UtcNow.ToString(); ParentDirectory.SubDiretories.Add(ChildDirectory); } } } } |
Aufruf:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7:
| MyDirectory RootDirectory = new MyDirectory(); RootDirectory.Typ = "Ordner"; RootDirectory.Dateiname = @"\\bla\blablub\y41d"; RootDirectory.letzteAenderung = DateTime.UtcNow.ToString(); RootDirectory.Bearbeiter = ""; RootDirectory.Status = ""; OrdnerAbbilden(@"\\bla\blablub\y41d", RootDirectory); |
Problem:
Wenn in der rekursiven Funktion das erste mal ein ChildDirectory in die IList<MyDirectory> eingetragen werden soll sagt mir der Debugger NullRefException. Speziell betrifft das die Zeile ParentDirectory.SubDiretories.Add(ChildDirectory); nach der Switch-Anweisung. Datei haben aber sowohl ParentDirectory, als auch ChildDirectory Werte.
Nun wäre meine Vermutung, dass die IList<MyDirectory> entweder nicht korrekt instanziiert wurde, oder dass die Liste eine spezielle Art von Parametern erwartet - allerdings weis ich nicht genau welche ^^
Andere Vermutung wäre die Instanziierung der Objekte aus der MyDirectory-Klasse - baut der Compiler das Objekt korrekt auf mittels des Aufrufs "MyDirectory RootDirectory = new MyDirectory();", obwohl ich nicht explizit einen Konstruktor in der Klasse erzeugt habe?
Weis jemand von euch woran das liegen kann?
Liebe Grüße
Basti