Newsgroup: it.comp.lang.delphi
Titolo: Ricerca file

Allora devo ricercare tutti i file con una certa estensione
all'interno di una cartella, e in seguito inserire tutti i percorsi di
tali file in una lista...come posso fare...1 altra cosa..se nella
cartella sono presenti altre cartelle come posso fare per cercare
anche al loro interno...


Ciao.
Nel mondo VCL/win32, ti suggerisco di utilizzare le funzioni
FindFirst, FindNext,... che trovi descritte nell'help.
Per cercare nelle sottocartelle consiglio di ricorrere ad una
procedura ricorsiva.
Ti allego un esempio che dovrebbe anche essere PURE funzionante (ho
isolato del codice senza IDE).
Nel caso in esame cercavo degli mp3 all'interno di una directory e
sottodirectory.
Presta molta attenzione all'elemento chiave TSearchRec che contiene le
informazioni del file cercato.
Ciao
Paolo
procedure Search(vDirectory: string);
var
  sr: TSearchRec;
  vFileName:string;
begin
    vDirectory:=IncludeTrailingBackslash(vDirectory);
    if FindFirst(vDirectory+'*.*', faDirectory, sr) = 0 then begin
        repeat
            vFileName:=
sr.name
;
            if (sr.Attr and faDirectory) = sr.Attr then begin
                if (vFileName='.') or (vFileName='..') then begin
                    continue;
                end;
                Import(vDirectory+
sr.name
);
            end;
        until FindNext(sr) <> 0;
    end;
    FindClose(sr);
    if FindFirst(vDirectory+'*.mp3', faAnyFile, sr) = 0 then begin //
mp3 e' l'estensione dei file scelta
        repeat
            vFileName:=
sr.name
;
            if (sr.Attr and faArchive) = sr.Attr then begin
                // fai qualcosa  es. inserisci in una lista
            end;
        until FindNext(sr) <> 0;
    end;
    FindClose(sr);
end;


ho provato ma mi da degli errori...
Eventualmente se non ci sono sottocartelle devo comunque usare un
tsearchrec?

 - Mostra testo citato -

Ti allego una mia procedura ricorsiva che memorizza in una tabella tutti i 
file e relativi percorsi, sottodirectory incluse.
Ovviamente puoi cambiare i criteri di ricerca dei file e la destinazione di 
quanto trovato.
procedure Tmainform.sfoglia(p: string);// p č il percorso iniziale
var
sr:tsearchrec;
f:string;
label a;
label b;
begin
if findfirst(p+'\*.*',faanyfile,sr)<>0 then exit;
if (sr.Name='.')or(sr.Name='..') then goto a;
if sr.Attr=fadirectory then
sfoglia(p+'\'+sr.Name) //sfoglia la subdirectory
else begin
if lowercase(sr.Name)<>'thumbs.db' then //non tener conto del file di 
anteprima di Windozz
begin
f:=extractfileext(sr.Name);
if estensioni.IndexOf(uppercase(f))<>-1 then //estensioni č una stringlist 
con le estensioni cercate in maiuscolo
begin
tabella.insert;
tabellanomefile.value:=sr.Name;
tabellapercorso.value:=p;
tabellalunghezza.value:=sr.Size;
tabella.post
;
end;
end;
end;
a:
while findnext(sr)=0 do
begin
if (sr.Name='.')or(sr.Name='..') then goto b;
if sr.Attr=fadirectory then
sfoglia(p+'\'+sr.Name)
else begin
if lowercase(sr.Name)<>'thumbs.db' then
begin
f:=extractfileext(sr.Name);
if estensioni.IndexOf(uppercase(f))<>-1 then
begin
tabella.insert;
tabellanomefile.value:=sr.Name;
tabellapercorso.value:=p;
tabellalunghezza.value:=sr.Size;
tabella.post
;
end;
end;
end;
b:
end;
findclose(sr);
end;