Zum Inhalt springen

C# Unterordner auslesen und in textbox ausgeben


Empfohlene Beiträge

Geschrieben

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?

Geschrieben
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?

Geschrieben

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.

Geschrieben

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 :)

Geschrieben
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?

Geschrieben


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.

Geschrieben

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.

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...