Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 7 odgovora
  • 3.876 pregleda

Najnovija ↓

Rekurzivna pretraga 26.06.2004. u 19:32 · pre 272 meseca #1
Treba mi sto brzi i manji algoritam za rekurzivnu pretragu fajlova na hard disku (ukljucujuci i subdirektorijume). Trazio sam po internetu, nasao sam samo neke komponente za pretrazivanje, btw meni treba (skup) procedura/funkcija koji ce, recimo da zapisu sve putanje do fajlova u jedan fajl.

Poz, Marko.
Re: Rekurzivna pretraga 26.06.2004. u 22:06 · pre 272 meseca #2
Evo ja znam kako to da se odradi koristeći Windows-ov API, ako ti to nešto znači. Mada, to je ujedno i najsporija metoda...
Potpis
Yea, and from this day forth, a surface must be locked before beast or man can draw upon it!
Re: Rekurzivna pretraga 28.06.2004. u 01:47 · pre 272 meseca #3
evo ovako:
Code:

var
  FindResult: integer;
  SearchRec : TSearchRec;
begin
...
  FindResult := FindFirst(Path + '*.*', faAnyFile - faDirectory, SearchRec);
  while FindResult = 0 do
   begin
     //radis nesto sa fajlom SearchRec.Name
     FindResult := FindNext(SearchRec);
   end;
...
end;

promeni ono *.* u masku fajla koji trazis, path ti je ime direktorijuma.
i ako mene pitas, ovo je sasvim zadovoljavajuce brzine.
pozdrav
Potpis
Ride the rainbow, crack the sky

DIY gitare, pojacala i efekti www.diy-fever.com
Re: Rekurzivna pretraga 28.06.2004. u 09:55 · pre 272 meseca #4
Ne bi bilo loše da sve to staviš u try..finally klauzulu za slučaj neke neočekivane greške. Treba još dodati i SysUtils.FindClose(SearchRec); inače rizikuješ da handle bar jedne datoteke ostane zauzet.
Potpis
Yea, and from this day forth, a surface must be locked before beast or man can draw upon it!
Re: Rekurzivna pretraga 28.06.2004. u 13:54 · pre 272 meseca #5
Hvala na odgovorima, preradio sam onu proceduru koju mi je bancika dao :

Code:

procedure FindFiles(const Path, FileExt : String);
var
  SearchRec : TSearchRec;
begin
  If FindFirst(Path + FileExt, faAnyFile - faDirectory, SearchRec) = 0 Then
    repeat
      // Pronadjen fajl koji zadovoljava kriterijme (putanja = Path + SearchRec.Name)
    until FindNext(SearchRec) <> 0;

  If FindFirst(Path + '*.*', faDirectory, SearchRec) = 0 Then
    repeat
      If (SearchRec.Attr and faDirectory <> 0) and
         (SearchRec.Name <> '.') and
         (SearchRec.Name <> '..') Then
        FindFiles(Path + SearchRec.Name + '\', FileExt);
    until FindNext(SearchRec) <> 0;

  FindClose(SearchRec);
end;


Poz, Marko.

Re: Rekurzivna pretraga 28.06.2004. u 14:16 · pre 272 meseca #6
Pazi samo da ti taj FindClose ne uzme iz Windows unit-a, jer to nije isto. Za svaki slučaj naznači da je iz unit-a SysUtils (negde gore sam napisao i kako).
Potpis
Yea, and from this day forth, a surface must be locked before beast or man can draw upon it!
Re: Rekurzivna pretraga 28.06.2004. u 14:36 · pre 272 meseca #7
Ne moze da pozove Windows.FindClose nikako, zato sto se ona poziva sa nekim parametrom tipa Cardinal, dok se SysUtils.FindClose poziva sa parametrom tipa TSearchRec.

Poz, Marko.
Re: Rekurzivna pretraga 28.06.2004. u 15:48 · pre 272 meseca #8
Može, može... Ne bih ti ja to bez veze govorio. Meni je zbog toga pravio problem. Čisto da znaš, pa ako tebi radi ok i bez toga - super.
Potpis
Yea, and from this day forth, a surface must be locked before beast or man can draw upon it!
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme