Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Informatik in der Schule » C# Unterordner miteinbeziehen » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen C# Unterordner miteinbeziehen
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
InformaTiger InformaTiger ist männlich
Tripel-As


images/avatars/avatar-77.gif

Dabei seit: 19.02.2013
Beiträge: 228
Herkunft: Südtirol

C# Unterordner miteinbeziehen Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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

__________________
Why do Java developers wear glasses? Because they can't C#
20.04.2013 18:50 InformaTiger ist offline Beiträge von InformaTiger suchen Nehmen Sie InformaTiger in Ihre Freundesliste auf
Airblader Airblader ist männlich
Doppel-As


Dabei seit: 03.03.2013
Beiträge: 138
Herkunft: München

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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

__________________
The best thing about a boolean is that even if you're wrong, you're only off by a bit.
20.04.2013 19:23 Airblader ist offline Beiträge von Airblader suchen Nehmen Sie Airblader in Ihre Freundesliste auf
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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


__________________
Syntax Highlighting fürs Board (Link)
20.04.2013 19:45 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
Airblader Airblader ist männlich
Doppel-As


Dabei seit: 03.03.2013
Beiträge: 138
Herkunft: München

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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

__________________
The best thing about a boolean is that even if you're wrong, you're only off by a bit.
20.04.2013 19:48 Airblader ist offline Beiträge von Airblader suchen Nehmen Sie Airblader in Ihre Freundesliste auf
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Hoppla, da steht's ja smile

__________________
Syntax Highlighting fürs Board (Link)
20.04.2013 19:55 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
Informatiker Board » Themengebiete » Informatik in der Schule » C# Unterordner miteinbeziehen