Informatiker Board (http://www.informatikerboard.de/board/index.php)
- Themengebiete (http://www.informatikerboard.de/board/board.php?boardid=1)
-- Informatik in der Schule (http://www.informatikerboard.de/board/board.php?boardid=21)
--- C# Unterordner miteinbeziehen (http://www.informatikerboard.de/board/thread.php?threadid=1470)


Geschrieben von InformaTiger am 20.04.2013 um 18:50:

  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



Geschrieben von Airblader am 20.04.2013 um 19:23:

 

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



Geschrieben von eulerscheZahl am 20.04.2013 um 19:45:

 

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)
            { }
        }



Geschrieben von Airblader am 20.04.2013 um 19:48:

 

@ "Mein Compiler kennt getElements nicht": Ich habe ja auch gesagt, dass es Pseudo-Code ist. Augenzwinkern



Geschrieben von eulerscheZahl am 20.04.2013 um 19:55:

 

Hoppla, da steht's ja smile


Forensoftware: Burning Board, entwickelt von WoltLab GmbH