FindAllFiles/fi

From Free Pascal wiki
Jump to navigationJump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

English (en) español (es) suomi (fi) français (fr) polski (pl) русский (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);
Light bulb  Huomaa: Jos halutaan käyttää tätä funktiota komentoriviohjelmassa niin lisäämällä projektin vaatimuksiin LCLBase niin silloin ei tarvita koko LCL-kirjastoa