Compago

...free knowledge

 
  • Increase font size
  • Default font size
  • Decrease font size
Home Manuali Programmazione Elencare files in una directory con Delphi

Elencare files in una directory con Delphi

E-mail Stampa PDF

Per riempire una TstringList con la lista dei file contenuti in una directory possiamo ricorrere a questa procedure:

procedure LoadFilesByMask(lst: TStrings; const SpecDir, WildCard: string);
var
  intFound: Integer;
  SearchRec: TSearchRec;
begin
  lst.Clear;
  intFound := FindFirst(SpecDir + WildCard, faAnyFile, SearchRec);
  while intFound = 0 do
  begin
    lst.Add(SpecDir + SearchRec.Name);
    intFound := FindNext(SearchRec);
  end;
  FindClose(SearchRec);
end;

dove lst sarà la TStringList da riempire, Specdir è la directory base da esaminare e wilcard è una stringa che definirà la tipologia di nomi da ricercare. Possiamo richiamare questa procedura usando:

LoadFilesByMask(MyList, ExtractFilePath(Application.ExeName),'*.bmp')

con la quale verranno ricercati tutti i file Bitmap presenti nella directory dello stesso file eseguibile che stiamo creando.

Se volessimo cercare solo le sotto directory dovremo modificare il parametro "faAnyFile" all'interno della funzione FindFirst :

faReadOnly  = $00000001 platform;
faHidden    = $00000002 platform;
faSysFile   = $00000004 platform;
faVolumeID  = $00000008 platform deprecated;  // not used in Win32
faDirectory = $00000010;
faArchive   = $00000020 platform;
faSymLink   = $00000040 platform;
faAnyFile   = $0000003F;

Per una ricerca ricorsiva nelle subdirectory le funzioni sono sempre le stesse, nella seguente funzione la lista verrà riempita con i nomi dei file presenti nella directory inserita come input e in tutte le sue sotto directory:

function TForm2.LoadFilesByMask(lst: TStrings; const Path, Mask: string):integer;
 var
   FindResult: integer;
   SearchRec : TSearchRec;
 begin
   result := 0;
   //find directory's files
   FindResult := FindFirst(Path + Mask, faAnyFile - faDirectory, SearchRec);
   while FindResult = 0 do begin
     lst.Add(Path + SearchRec.Name);
     result := result + 1;
     FindResult := FindNext(SearchRec);
   end;
   FindClose(SearchRec);
 
   //looking for other files in all sub directories
   FindResult := FindFirst(Path + '*.*', faDirectory, SearchRec);
   while FindResult = 0 do begin
     if (SearchRec.Name <> '.') and (SearchRec.Name <> '..') then
       result := result+LoadFilesByMask(lst,Path + SearchRec.Name + '\', Mask);
 
     FindResult := FindNext(SearchRec);
   end;
 
   FindClose(SearchRec);
 end;

Attenzione che il nome della directory immessa deve terminare con uno slash "\".

Ultimo aggiornamento ( Lunedì 25 Luglio 2011 15:42 )  
Loading

Login




Chiudi