[Delphi] Szybkie przeszukiwanie folderów

0

Wiem, że problem wyszukiwania plików i folderów wielokrotnie przewijał się przez forum, ale nigdzie nie znalazłem szybkiego algorytmu na wyszukiwanie wszystkich plików, podkatalogów, itd. w danym katalogu.
Tzn. mam algorytm, ale działa on na zasadzie rekurencji, więc jak przeszukuje cały dysk systemowy to trochę to trwa.
Żeby za bardzo nie zamieszać, zamieszczam uproszczony algorym, z którego korzystam (po prostu obcięty z nieistotnych fragmentów dla mojego problemu):

procedure Skanuj(Dir: String);
var
  Found, n : integer;
  F : TSearchRec;

   procedure Dodaj;
   begin
     // tutaj funkcje dodawania do listy
   end;

begin
  Dir := IncludeTrailingPathDelimiter(Dir);
  Found := FindFirst(Dir+'*', faAnyFile, F);
  While Found = 0 do
  begin
    If (F.Name<>'.') and (F.Name<>'..') then
      If (F.Attr and faDirectory)= faDirectory then
        begin
          Dodaj;
          Skanuj( Dir+F.Name);
        end
      else
        begin
          Dodaj;
        end;
    Found := FindNext(F);
  end;
  FindClose(F);
end;

Wiecie jak to przyśpieszyć? Chyba najlepiej byłoby to przekształcić jakoś na algorytm iteracyjny.

0

Nie patrzylem w zrodlo ale w moich testach wypadal szybciej niz napisana przeze mnie procka z rekurencja... Popatrz w zrodelko :)
http://www.torry.net/vcl/filedrv/search/teasyfilesearch.zip

0

zamiana rekurencji na iterację dużo nie da, bo i tak największe opóźnienie wprowadza odczyt z dysku. jeśli zależy Ci na monitorowaniu na bieżąco zawartości dysku, to przeskanuj go raz, a potem monitoruj zmiany (FindFirstChangeNotification/FindNextChangeNotification).

0

Ktoś się natrudził nad tym kodem. Ten algorytm jest iteracyjny, z tego co wstępnie wylukałem to tworzy on dynamiczną tablicę z folderami do przeszukania.
Popróbuję wmontować to w mój program ;)

Jak ktoś ma jakieś prostsze pomyśly, niech pisze.

// dop.

zależy mi na zrobieniu programiku do katalogowania płyt i dysków. wiem że jest takich pełno, ale żeden nie spełnia moich oczekiwań :] , a nawet jeśli, to wtedy kosztuje o kilkadziesiąt $ za dużo.

// dop. 2

na pewno idzie to jakoś przyśpieszyć.. mam programik Advanced Disk Catalog, i on przeszukuje mój dysk znacznie szybciej (i chyba też jest napisany w Delphi).

0

Jak procedura nie zajmuje 100% procesora to nie ma tu czego przyspieszać. Możesz zawsze odczytać tablice MFT i sam z niej wyciągnać informacje :0

0

Zmieniłem strukture danych (z tablicy jednowymiarowej na drzewo)... co przyśpieszyło przeszukiwanie rekordów... oraz dodawanie znalezionych plików i folderów.
Więc nawet wykorzystując rekurencje przeszukuje dyski znośnie szybko.

1 użytkowników online, w tym zalogowanych: 0, gości: 1