No to tak.. przede wszystkim najważniejsza rzecz - rekurencja. Funkcja/metoda rekurencyjna, jak to tam się w C# zwie.
Głównie chodzi o to, aby zrobić taką funkcję która wywołuje samą siebie. W pseudokodzie Twojego zadania:
Kod :
Funkcja przeglądaj(katalog)
Dla każdego pliku [plik] w katalogu katalog:
jeżeli plik jest katalogiem:
przeglądaj(plik)
wypisz(plik.nazwa)
W Javie wyglądało by to tak:
Kod :
public void przegladaj(File folder) {
for (File plik : folder.listFiles()) {
if (isDirectory(plik))
przegladaj(plik);
System.out.println(plik.getName());
}
}
Jak to mniej więcej zadziała.. wywołujesz metodę używając, w Javie, przeglądaj(new File("C:")). W C: jest parę katalogów i plików, dajmy na to:
Windows, Program Files - katalogi
pagefile.sys - plik
Iterujemy po każdym pliku w tym katalogu. Na początku napotykamy pagefile.sys jeżeli trafi nam się kolejność alfabetyczna. If się nie spełni, wypisze nazwę.
Później przychodzi czas na Program Files. On jest katalogiem. Obecne wykonywanie metody przeglądaj() zostaje odłożone w czasie i teraz zaczyna się nowa instancja, tamta istnieje ale jest wstrzymana*. W Program Files znajdą się kolejne katalogi i znowu ta sama sytuacja, wstrzymanie wywołania przeglądaj() dla Program Files i wywołanie dla katalogu Adobe [..].
W końcu gdzieś będzie koniec tej rekurencji i po wykonaniu wszystkich głębszych rozkazów wróci do tego wstrzymanego Program Files. Ponieważ zrobiło już swoje, wypisze tylko jego nazwę i przejdzie do katalogu Windows [..]
Tak działa rekurencja w przypadku plików, w C# powinieneś dać sobie radę.
* - musiał byś się zaznać z mechaniką stosu
Zakładki