Na początek, przyda Ci się using System.IO;
W ramach przykładu użyłem ListBoxa.
funkcja dodająca ;-)
private void ListDirectory(string path) {
foreach (string f in Directory.GetDirectories(path))
{
ListDirectory(f);
}
foreach (string f in Directory.GetFiles(path)) {
this.listBox1.Items.Add(f);
}
}
A tutaj wywołanie okna dialogu:
if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
{
string path = this.folderBrowserDialog1.SelectedPath;
ListDirectory(path);
}
W ramach tłumaczenia, drugi listing znajduje się w zdarzeniu kliknięcia w button - ale to się tyczy oczywiście mojego przykładu. Po wybraniu folderu, którego struktura będzie wyglądać tak:
+ Nazwa zespołu
|--+ Pierwsza płyta
|...|-- Piosenka 1
|...|-- Piosenka 2
|...|-- Piosenka 3
|
|--+ Druga płyta
|...|-- Piosenka 1
|...|-- Piosenka 2
|
|-- Piosenka 1 [w głównym folderze zespołu]
|-- Piosenka 2
Czyli, jak widać, główny folder ma dwa podfoldery, które kolejno zawierają, trzy i dwie piosenki. Ponadto, ma jeszcze dwie piosenki nie przypisane do konkretnej płyty.
Podana funkcja, będzie działać tak: [na rzecz głównego folderu];
1. Wywoływanie funkcji na rzecz podanej ścieżki.
2. Funkcja sprawdza czy wewnątrz znajdują się jakieś foldery, jeżeli tak, przechodzi do punktu 1. jeżeli nie, 3.
3. Funkcja listuje wszystkie znajdujące się wewnątrz pliki i dodaje ich ścieżkę do listboxa.
4. Koniec.
W efekcie, w listboxie powinno się pojawić takie coś:
GłównyFolder/PierwszaPłyta/Piosenka1
GłównyFolder/PierwszaPłyta/Piosenka2
GłównyFolder/PierwszaPłyta/Piosenka3
GłównyFolder/DrugaPłyta/Piosenka1
GłównyFolder/DrugaPłyta/Piosenka2
GłównyFolder/Piosenka1
GłównyFolder/Piosenka2
Oczywiście w formie całej ścieżki, która zresztą będzie Ci potrzebna, ale możesz do ListBoxa dodać swoją klasę, np.
class Piosenka {
String name, String path;
}
// jeszcze mała uwaga, będziesz potrzebował nadpisać metodę ToString(), slówko: override :-)
Tutaj mały przykład wykorzystania:
var p = new Piosenka();
p.name = "Name";
p.path = "Path";
listBox1.Items.Add(p);
MessageBox.Show(((Piosenka)(listBox1.Items[0])).name, ((Piosenka)(listBox1.Items[0])).path);
W messageBox rzutujesz na Piosenke, ale ładniej będzie jak zrobisz to w ten sposób:
Piosenka p = (Piosenka)listBox.Items[index];