Difference between revisions of "FindAllFiles/fi"

From Free Pascal wiki
Jump to navigationJump to search
(Created page with "{{FindAllFiles}} = Hae kaikki tiedostot = Lazaruksen käännösyksikkö (unit) LazFileUtils (Joka sisältää UTF-8 korvaukset FPC RTL koodille ja l...")
 
m (Fixed syntax highlighting)
 
Line 9: Line 9:
 
* http://lazarus-ccr.sourceforge.net/docs/lcl/fileutil/tfilesearcher.html
 
* http://lazarus-ccr.sourceforge.net/docs/lcl/fileutil/tfilesearcher.html
  
<source>
+
<syntaxhighlight lang=pascal>
 
procedure FindAllFiles(AList: TStrings; const SearchPath: String;
 
procedure FindAllFiles(AList: TStrings; const SearchPath: String;
 
   SearchMask: String = ''; SearchSubDirs: Boolean = True; DirAttr: Word = faDirectory);  
 
   SearchMask: String = ''; SearchSubDirs: Boolean = True; DirAttr: Word = faDirectory);  
Line 15: Line 15:
 
function FindAllFiles(const SearchPath: String; SearchMask: String = '';
 
function FindAllFiles(const SearchPath: String; SearchMask: String = '';
 
   SearchSubDirs: Boolean = True): TStringList;
 
   SearchSubDirs: Boolean = True): TStringList;
</source>
+
</syntaxhighlight>
  
 
[[Function|Funktio]] ja [[Procedure/fi|aliohjelma]] '''FindAllFiles'''etsivä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ä.
 
[[Function|Funktio]] ja [[Procedure/fi|aliohjelma]] '''FindAllFiles'''etsivä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ä.
Line 27: Line 27:
  
 
'''Esimerkki:'''
 
'''Esimerkki:'''
<source>
+
<syntaxhighlight lang=pascal>
 
uses  
 
uses  
 
   ..., LazFileUtils, ...
 
   ..., LazFileUtils, ...
Line 51: Line 51:
 
     PascalFiles.Free;
 
     PascalFiles.Free;
 
   end;
 
   end;
</source>
+
</syntaxhighlight>
  
 
'''TÄRKEÄ HUOMAUTUS:'''
 
'''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:
 
''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:
<source>
+
 
   // Älä koskaan tee tätä  !!!! - Sillä tässä tapauksessa ei ole tapaa vapauttaa TStringList-tyyppistä merkkijono-oliota jonka FindAllFiles luo.
+
<syntaxhighlight lang=pascal>
 +
   // Ä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);
 
   Listbox1.Items.Assign(FindAllFiles(LazarusDirectory, '*.pas;*.pp;*.p;*.inc', true);
</source>
+
</syntaxhighlight>
  
 
{{Note|Jos halutaan käyttää tätä funktiota komentoriviohjelmassa niin lisäämällä projektin vaatimuksiin ''LCLBase'' niin silloin ei tarvita koko LCL-kirjastoa}}
 
{{Note|Jos halutaan käyttää tätä funktiota komentoriviohjelmassa niin lisäämällä projektin vaatimuksiin ''LCLBase'' niin silloin ei tarvita koko LCL-kirjastoa}}

Latest revision as of 00:58, 16 February 2020

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