Pagina1 van 1
Forum

Welkom bij de Tweaking4All gemeenschapsforums!
Voor je gaat deelnemen, bekijk de Forum Regels!

Specifieke onderwerpen: Start het onderwerp met de naam van het programma of systeem.
Bijvoorbeeld “MacOS X – Jouw vraag“, of bijvoorbeeld “MS Word – Jouw Tip of Truc“.

Merk op: Omschakelen naar een andere taal zal niet werken als je een post aan het lezen bent aangezien er waarschijnlijk geen vertaling beschikbaar is.



Deel:
Meldingen
Alles wissen

[Opgelost] Lazarus - Lijst op halen van bestanden in een directory en sub-directories

2 Berichten
1 Gebruikers
0 Reactions
1,345 Bekeken
 Hans
(@hans)
Famed Member Admin
Deelgenomen: 12 jaar geleden
Berichten: 2864
Topic starter  

Met de gebruikelijk TSearchRec en FindFirst functies (je vindt ze ook in Delphi) kun je de bestanden in directory en bijbehorende subdirectories ophalen.

Tot mijn verrassing heeft Lazarus handige functie in de "fileutil" unit genaamd FindAllFile() welke files oppikt uit de aangegeven directory en sub directories, welke voldoen aan jouw criteria en plopt het netjes in een TStringList ...

uses 
...
fileutil
...
var
PascalFiles: TStringList;
begin
//No need to create the stringlist; the function does that for you
PascalFiles := FindAllFiles(LazarusDirectory, '*.pas;*.pp;*.p;*.inc', true); //find e.g. all pascal sourcefiles
try
showmessage(Format('Found %d Pascal source files',[PascalFiles.Count]));
finally
PascalFiles.Free;
end;


   
BeantwoordenCiteren
 Hans
(@hans)
Famed Member Admin
Deelgenomen: 12 jaar geleden
Berichten: 2864
Topic starter  

N.b.: 

De FindAllFiles functie heeft de optionele, maar slecht gedocumenteerde, parameter "DirAttr".
Deze parameter staat het toe om aan te geven wat voor type "bestanden" je terug krijgt.

Constant        Value   Description       Linux Meaning
faReadOnly 1 Read-only files Current user does not have write access. 
faHidden 2 Hidden files File name begins with ".". 
faSysFile 4 System files File is socket, symbolic link, device file, or FIFO. 
faVolumeID 8 Volume ID files Not used. 
faDirectory 16 Directory files Directory. 
faArchive 32 Archive files Not used. 
faSymLink 64 Symbolic link File is a symbolic link. 
faAnyFile 71 Any file Any file. 

Dus als je alleen maar directories wilt zien, dan zet je deze waarop faDirectory (of 16).

Als je alles behalve directories wilt zien, gebruik dan 182 (1+2+4+8+32+64+71).

p.s. er is ook den functie FindAllDirectories, welke dat overbodig zou maken. Maar je kunt DirAttr b.v. ook gebruiken om alle hidden bestanden te zoeken, etc.


   
BeantwoordenCiteren
Deel: