Veröffentlicht 18. September 201014 j 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?
18. September 201014 j 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?
18. September 201014 j Autor 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.
18. September 201014 j 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.
19. September 201014 j Autor 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
19. September 201014 j 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?
19. September 201014 j Autor 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.
19. September 201014 j 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.
21. September 201014 j Grundsätzlich kann ich nur empfehlen mit den Klassen DirectoryInfo und FileInfo zu arbeiten. Die bieten einen enormen Lesekomfort
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.