C# Unterordner miteinbeziehen

Neue Frage »

Auf diesen Beitrag antworten »
InformaTiger C# Unterordner miteinbeziehen

Hallo,
ich möchte bei folgendem Code gerne die Unterordner miteinbeziehen, wie kann ich das machen?

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
folderBrowserDialogMusik = new FolderBrowserDialog();

if (folderBrowserDialogMusik.ShowDialog() == DialogResult.OK)
{
         aPfad = folderBrowserDialogMusik.SelectedPath;
}

// Holt die mp3 Dateien aus dem Ordner
string[] aDateien = Directory.GetFiles(aPfad);
foreach (string aDatei in aDateien)
{
         if (aDatei.ToLower().EndsWith(".mp3"))
         {
                  aAlleMusikdateien[aCounter] = aDatei;
                  aCounter++; // ist eine am Programmbeginn deklarierte Variable
         }
}


Danke.

Lg
InformaTiger
 
Auf diesen Beitrag antworten »
Airblader

Im ersten Ansatz ist sowas ein Rekursionsproblem, d.h. man durchsucht alle Elemente des Ordners. Ist das aktuelle Element ein Ordner, so ruft man die Funktion wiederum für diesen Ordner auf. In Pseudo-Code sieht das so aus:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
public string[] findMusicFiles( string dir ) {
    string[] result;

    foreach( string element in Directory.getElements( dir ) ) {
        if( Directory.isDirectory( element ) {
            result.append( findMusicFiles( element ) );
        } else if( element.toLower().endsWith( ".mp3" ) ) {
            result.append( element );
        }
    }

    return result;
}


Allerdings ist es sprachenabhängig sehr gut möglich, dass man sich sowas sparen kann. In diesem Fall hilft meist schon eine kurze Google-Suche, um z.B. sowas zu finden. Einfach mal ausprobieren, ich habe leider keinen C#-Compiler installiert. Augenzwinkern
Auf diesen Beitrag antworten »
eulerscheZahl

Das verlinkte Beispiel funktioniert nicht immer:
Zitat:
System.UnauthorizedAccessException wurde nicht behandelt.
Message=Der Zugriff auf den Pfad "F:\Documents and Settings" wurde verweigert. [...]

unter Verwendung von try wird komplett abgebrochen.

Mein Compiler kennt die Funktion getElements(dir) nicht.

mein Vorschlag (sehr ähnlich)
code:
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:
using System.Collections.Generic;
using System.IO;
//...

        private void button1_Click(object sender, EventArgs e)
        {
            List<string> dateien = new List<string>();
            DurchsucheOrdner("F:\\Screenshots\\", ".png", ref dateien);
            foreach (string s in dateien)
                richTextBox1.AppendText(s + "\n");
        }

        private void DurchsucheOrdner(string pfad, string endung, ref List<string> liste)
        {
            try
            {
                DirectoryInfo di = new DirectoryInfo(pfad);
                DirectoryInfo[] directories = di.GetDirectories();

                FileInfo[] files = di.GetFiles();

                foreach (DirectoryInfo dir in directories)
                    DurchsucheOrdner(pfad + dir.Name + "\\", endung, ref liste);

                foreach (FileInfo file in files)
                    if (file.Name.EndsWith(endung))
                        liste.Add(pfad + file.Name);
            }
            catch (Exception)
            { }
        }
Auf diesen Beitrag antworten »
Airblader

@ "Mein Compiler kennt getElements nicht": Ich habe ja auch gesagt, dass es Pseudo-Code ist. Augenzwinkern
 
Auf diesen Beitrag antworten »
eulerscheZahl

Hoppla, da steht's ja smile
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »