FindAllFiles/fi

From Free Pascal wiki

English (en) español (es) suomi (fi) français (fr) русский (ru)

Hae kaikki tiedostot

Lazaruksen käännösyksikkö (unit) LazFileUtils (Joka sisältää UTF-8 korvaukset FPC RTL koodille ja lisäksi siellä on tiedoston/hakemiston(kansion) käsittelyä)

Katso myös:

procedure FindAllFiles(AList: TStrings; const SearchPath: String;
  SearchMask: String = ''; SearchSubDirs: Boolean = True; DirAttr: Word = faDirectory); 

function FindAllFiles(const SearchPath: String; SearchMask: String = '';
  SearchSubDirs: Boolean = True): TStringList;

Funktio ja aliohjelma FindAllFilesetsivät tiedostoja, jotka vastaavat SearchPath-hakemistossa olevaa hakumaskia ja jos ei pois suljeta niin myös sen alihakemistoja. Se palauttaa suorituksen jälkeen TStringList-tyyppisen merkkijono-olion tuloksena saatana olevilla tiedostonimillä.

Maskina voi olla yksi ainoa maski, jota voidaan käyttää FindFirst / FindNext -funktioissa tai se voi sisältää luettelon maskeista, jotka on erotettu puolipisteellä (;).
Maskissa olevat välilyönnit käsitellään kirjaimina.

Tarjolla on kaksi ylikuormitettua versiota tästä rutiinista erilaisiin tarkoituksiin. Ensimmäinen on aliohjelma (procedure) ja se olettaa, että vastaanottava TStrings- (tai TStringList-) tyyppinen merkkijono-olio on jo luotu. Toinen on funktio joka luo TStringList-tyyppisen merkkijono-olion sisäisesti ja palauttaa sen funktion tulokseksi. Kummassakin tapauksessa TStringList-tyyppinen merkkijono-olio on purettava kutsumalla olion free metodia.


Esimerkki:

uses 
  ..., LazFileUtils, ...
var
  PascalFiles: TStringList;
begin
  PascalFiles := TStringList.Create;
  try
    FindAllFiles(PascalFiles, LazarusDirectory, '*.pas;*.pp;*.p;*.inc', true); //Etsii esim. kaikki pascal lähdekooditiedostot
    ShowMessage(Format('Löydettiin %d kpl Pascal lähdekooditiedostoja', [PascalFiles.Count]));
  finally
    PascalFiles.Free;
  end;

// Tai

begin
  //No need to create the stringlist; the function does that for you
  PascalFiles := FindAllFiles(LazarusDirectory, '*.pas;*.pp;*.p;*.inc', true); //Etsii esim. kaikki pascal lähdekooditiedostot
  try
    ShowMessage(Format('Löydettiin %d kpl Pascal lähdekooditiedostoja', [PascalFiles.Count]));
  finally
    PascalFiles.Free;
  end;

TÄRKEÄ HUOMAUTUS: Funktio "FindAllFiles" luo TStringList-tyyppisen merkkijono-olion sisäisesti. Tämä saattaa näyttää erittäin kätevältä ensi silmäyksellä, mutta "muistin vuotaminen" (memory leaks) on erittäin helppoa näin:

  // Älä koskaan tee tätä  !!!! - Sillä tässä tapauksessa ei ole tapaa vapauttaa TStringList-tyyppistä merkkijono-oliota jonka FindAllFiles luo.
  Listbox1.Items.Assign(FindAllFiles(LazarusDirectory, '*.pas;*.pp;*.p;*.inc', true);
Note-icon.png

Huomaa: Jos halutaan käyttää tätä funktiota komentoriviohjelmassa niin lisäämällä projektin vaatimuksiin LCLBase niin silloin ei tarvita koko LCL-kirjastoa