Chirin Geschrieben 18. September 2010 Geschrieben 18. September 2010 Hallo, stehe noch ganz am Anfang des Themas programmieren (Anfängerfehler daher bitte entschuldigen.) Ich möchte die ersten 5 Unterordner in Eigene Dateien (1. Ebene genügt) auslesen und Ordnerpfad und die enthaltenen Dateien in einer TextBox ausgeben. (Probleme siehe Kommis im Quelltext) case "auslesen": //Eigene Dateien in textBox1 auslesen (Ergebnis direkt in TB sichtbar) string[] dirs = Directory.GetDirectories(Environment.GetFolderPath(Environment.SpecialFolder.Personal)); textBox1.Clear(); foreach (string dir in dirs) { for (int num = 0; num < 5; num++) { //aktuellen Ordnerpfad ausgeben (i soll dabei Ordnernummer sein) textBox1.AppendText(dir + "\r\n"); //Inhalt des Ordners auslesen und ausgeben num = Convert.ToInt16(dir.Length); //Nummer d. aktuell angew. Ordners //*****Problem: dir.Length zählt sofort die gesamte Ordneranzahl und nicht langsam hoch ***** //*****d.h. der Wert überschreitet sofort die Schleifen-Bedingung ***** string akdir = Directory.GetDirectoryRoot(dir); //Pfad d. akt. angew. Ordners //*****Problem: akdir greift nur auf C:\ zu. nicht auf das eigentlich gemeinte Directory***** string[] files = Directory.GetFiles(akdir); //Files im akt. Ordner auslesen //*****Liest folglichermaßen auch nur brav die Files in C:\ aus ***** //Funzt. Wurde erstmal auskommentiert für die Übersichtlichkeit. (Ordner sind wichtiger) //foreach(string file in files) //{ // textBox1.AppendText(fi + "\r\n"); // und ausgeben //} } break; } break; Kann mir jemand bei der Problemlösung behilflich sein? Zitieren
Klotzkopp Geschrieben 18. September 2010 Geschrieben 18. September 2010 num = Convert.ToInt16(dir.Length); //Nummer d. aktuell angew. Ordners //*****Problem: dir.Length zählt sofort die gesamte Ordneranzahl und nicht langsam hoch ***** //*****d.h. der Wert überschreitet sofort die Schleifen-Bedingung ***** Das Verhalten ist wie erwartet. Was hast du denn geglaubt, was dieser Code tut? string akdir = Directory.GetDirectoryRoot(dir); //Pfad d. akt. angew. Ordners //*****Problem: akdir greift nur auf C:\ zu. nicht auf das eigentlich gemeinte Directory*****Auch hier: Das Verhalten ist erwartet. Das ist genau das, was GetDirectoryRoot tut, deswegen heißt diese Funktion so. Das Verhalten passt zum Code. Deshalb auch hier wieder die Frage: Was sollte der Code tun? Zitieren
Chirin Geschrieben 18. September 2010 Autor Geschrieben 18. September 2010 Der Code soll schlicht und ergreifend die ersten 5 Ordner in meinen Eigenen Dateien auslesen und dessen Pfad und die enthaltenen Datei-Namen in einer TextBox ausgeben. Zitieren
Klotzkopp Geschrieben 18. September 2010 Geschrieben 18. September 2010 Ich meinte schon konkret diese beiden Zeilen. Ich sehe da ein paar größere Verständnisprobleme bei dir, und wollte so nachvollziehen, woher die kommen. Entweder hast du da von Anfang an viel zu kompliziert gedacht, oder du hast am Code rumgefrickelt, um ihn zum Laufen zu bringen. Die äußere foreach-Schleife durchläuft die gefundenen Unterverzeichnisse. Aber du brichst diese Schleife gleich nach dem ersten Durchlauf ab (mit break). Warum?Und warum machst du innerhalb des Schleifenrumpfes diese for-Schleife auf? Die foreach-Schleife durchläuft doch schon die Verzeichnisse, welchen Zweck hat die for-Schleife?dir ist ein String, dir.Length ist die Länge dieses Strings. Ich verstehe nicht, warum du die Schleifenvariable überhaupt auf diesen Wert setzt. Hat es eigentlich einen bestimmten Grund, dass du dich auf 5 Unterordner beschränkst? Ohne diese Beschränkung wäre der Code einfacher. Zitieren
Chirin Geschrieben 19. September 2010 Autor Geschrieben 19. September 2010 Die Beschränkung auf 5 war eigentlich Teil einer Übungsaufgabe. For-Schleife wurde jetzt kurzerhand entfernt und zum Laufen gebracht, wie es prinzipiell Laufen soll. Vielen Dank für deine Mühen Zitieren
lbm1305 Geschrieben 19. September 2010 Geschrieben 19. September 2010 Die Beschränkung auf 5 war eigentlich Teil einer Übungsaufgabe. For-Schleife wurde jetzt kurzerhand entfernt und zum Laufen gebracht, wie es prinzipiell Laufen soll. Vielen Dank für deine Mühen Wie bringt man etwas (hier die for-Schleife) zum Laufen, wenn diese entfernt wurde? Kannst Du nochmal Deine Lösung posten? Zitieren
Chirin Geschrieben 19. September 2010 Autor Geschrieben 19. September 2010 case "auslesen": //Eigene Dateien in textBox1 auslesen (Ergebnis direkt in TB sichtbar) string[] dirs = Directory.GetDirectories(Environment.GetFolderPath(Environment.SpecialFolder.Personal)); textBox1.Clear(); foreach (string dir in dirs) { //aktuellen Ordnerpfad ausgeben (num soll dabei Ordnernummer sein) textBox1.AppendText(dir + "\r\n"); //Inhalt des Ordners auslesen und ausgeben string[] files = Directory.GetFiles(dir); foreach (string file in files) { textBox1.AppendText("\t" + file + "\r\n"); } Weggemacht. Ganz einfach. Werden jetzt zwar alle Ordner und deren Files ausgegeben. Aber klappt zumindest so. Schade nur, dass die Ordner nicht mit dabei sind, die da eigentlich noch neben den Files enthalten sind. Zitieren
lbm1305 Geschrieben 19. September 2010 Geschrieben 19. September 2010 Lautete nicht die Aufgabe, die ersten 5 auszugeben? Dann frage ich mich, warum Du nicht statt einer foreach eine for-Schleife nutzt. Dann werden auch die ersten 5 ausgegeben :-/ Um bei ersten 5 Ordner noch tiefer zu gehen, müsstest Du eine rekursive Schleife erstellen. Daher wäre es besser, eine eigene Methode anzulegen, die sich wieder selber aufruft. Zitieren
Mcolli Geschrieben 21. September 2010 Geschrieben 21. September 2010 Grundsätzlich kann ich nur empfehlen mit den Klassen DirectoryInfo und FileInfo zu arbeiten. Die bieten einen enormen Lesekomfort Zitieren
NerdonRails Geschrieben 21. September 2010 Geschrieben 21. September 2010 man sollte statt \r\n lieber Environment.Newline nehmen. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.