FindAllFiles/fi: what changed
Revision 0 to 1. Removed lines have a minus sign; added lines have a plus sign.
Title: FindAllFiles/fi
| Old | New | Line | |
|---|---|---|---|
| 1 | + | # Hae kaikki tiedostot | |
| 2 | + | ||
| 3 | + | Lazaruksen [[Unit/fi|käännösyksikkö (unit)]] [[LazFileUtils]] (Joka sisältää [[UTF-8]] korvaukset FPC [[RTL]] koodille ja lisäksi siellä on tiedoston/hakemiston(kansion) käsittelyä) | |
| 4 | + | ||
| 5 | + | Katso myös: | |
| 6 | + | ||
| 7 | + | - <http://lazarus-ccr.sourceforge.net/docs/lcl/fileutil/findallfiles.html> | |
| 8 | + | - <http://lazarus-ccr.sourceforge.net/docs/lcl/fileutil/tfilesearcher.html> | |
| 9 | + | ||
| 10 | + | ``` pascal | |
| 11 | + | procedure FindAllFiles(AList: TStrings; const SearchPath: String; | |
| 12 | + | SearchMask: String = ''; SearchSubDirs: Boolean = True; DirAttr: Word = faDirectory); | |
| 13 | + | ||
| 14 | + | function FindAllFiles(const SearchPath: String; SearchMask: String = ''; | |
| 15 | + | SearchSubDirs: Boolean = True): TStringList; | |
| 16 | + | ``` | |
| 17 | + | ||
| 18 | + | [[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ä. | |
| 19 | + | ||
| 20 | + | Maskina voi olla yksi ainoa maski, jota voidaan käyttää FindFirst / FindNext -funktioissa tai se voi sisältää luettelon maskeista, jotka on erotettu puolipisteellä (;).\ | |
| 21 | + | Maskissa olevat välilyönnit käsitellään kirjaimina. | |
| 22 | + | ||
| 23 | + | 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. | |
| 24 | + | ||
| 25 | + | **Esimerkki:** | |
| 26 | + | ||
| 27 | + | ``` pascal | |
| 28 | + | uses | |
| 29 | + | ..., LazFileUtils, ... | |
| 30 | + | var | |
| 31 | + | PascalFiles: TStringList; | |
| 32 | + | begin | |
| 33 | + | PascalFiles := TStringList.Create; | |
| 34 | + | try | |
| 35 | + | FindAllFiles(PascalFiles, LazarusDirectory, '*.pas;*.pp;*.p;*.inc', true); //Etsii esim. kaikki pascal lähdekooditiedostot | |
| 36 | + | ShowMessage(Format('Löydettiin %d kpl Pascal lähdekooditiedostoja', [PascalFiles.Count])); | |
| 37 | + | finally | |
| 38 | + | PascalFiles.Free; | |
| 39 | + | end; | |
| 40 | + | ||
| 41 | + | // Tai | |
| 42 | + | ||
| 43 | + | begin | |
| 44 | + | //No need to create the stringlist; the function does that for you | |
| 45 | + | PascalFiles := FindAllFiles(LazarusDirectory, '*.pas;*.pp;*.p;*.inc', true); //Etsii esim. kaikki pascal lähdekooditiedostot | |
| 46 | + | try | |
| 47 | + | ShowMessage(Format('Löydettiin %d kpl Pascal lähdekooditiedostoja', [PascalFiles.Count])); | |
| 48 | + | finally | |
| 49 | + | PascalFiles.Free; | |
| 50 | + | end; | |
| 51 | + | ``` | |
| 52 | + | ||
| 53 | + | **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: | |
| 54 | + | ||
| 55 | + | ``` pascal | |
| 56 | + | // Älä koskaan tee tätä !!!! - Sillä tässä tapauksessa ei ole tapaa vapauttaa TStringList-tyyppistä | |
| 57 | + | // merkkijono-oliota jonka FindAllFiles luo. | |
| 58 | + | Listbox1.Items.Assign(FindAllFiles(LazarusDirectory, '*.pas;*.pp;*.p;*.inc', true); | |
| 59 | + | ``` | |
| 60 | + | ||
| 61 | + | > **Note:** Jos halutaan käyttää tätä funktiota komentoriviohjelmassa niin lisäämällä projektin vaatimuksiin *LCLBase* niin silloin ei tarvita koko LCL-kirjastoa | |
| 62 | + | ||
| 63 | + | --- | |
| 64 | + | *From the Free Pascal wiki, page "FindAllFiles/fi", as it stood on 2020-02-15 after a change by Trev, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).* |
