Description |
The FindFirst function searches for files matching a FileMask and Attributes, returning the first match (if found) in SearchResult.
The Attributes define files to search for in addition to regular files.
If a match is found, then the return value is 0, otherwise, it is negative (and the result record is not filled in).
The FileMask may contain a path, as well as a file name. The file name may contain wild cards:
? | : Match any one character |
* | : Match 0, 1 or more characters |
The Attributes may be set as follows:
faAnyFile | : Any file |
faReadOnly | : Read-only files |
faHidden | : Hidden files |
faSysFile | : System files |
faVolumeID | : Volume ID files |
faDirectory | : Directory files |
faArchive | : Archive files |
You may set Attributes from one or more of the above by concatenating them.
The SearchResult record comprises many fields. Some are used by subsequent calls to FindNext. Others are available to your program :
Name | : Of the long name of the file found |
Size | : The size of the file in bytes |
Time | : Last modified date/time of the file |
Attr | : The file attributes (as above) |
|
|
Notes |
Warning : you must call FindClose after a successful FindFirst when you have finished searching (finished calling FindNext). This frees up resources held by the find process (such as the SearchResult record).
If the FileMask contains no path information, then the search is in the current directory.
Because the Attributes parameter defines additional file types to search for, you should filter the results Attr value to select only the desired file types.
|
|
Related commands |
FileSearch |
|
Search for a file in one or more directories |
FindClose |
|
Closes a successful FindFirst file search |
FindNext |
|
Find the next file after a successful FindFirst |
TSearchRec |
|
Record used to hold data for FindFirst and FindNext |
|
|
|
Example code : Find all Unit1.d* regular files in the current directory |
var
searchResult : TSearchRec;
begin // Try to find regular files matching Unit1.d* in the current dir
if FindFirst('Unit1.d*', faAnyFile, searchResult) = 0 then
begin
repeat
ShowMessage('File name = '+searchResult.Name);
ShowMessage('File size = '+IntToStr(searchResult.Size));
until FindNext(searchResult) <> 0;
// Must free up resources used by these successful finds
FindClose(searchResult);
end;
end;
|
Show full unit code |
File name = Unit1.dcu
File size = 4382
File name = Uni1.dfm
File size = 524
File name = Uni1.ddp
File size = 51
|
|
Example code : Find all directories above and including the current one |
// Full Unit code. // ----------------------------------------------------------- // You must store this code in a unit called Unit1 with a form // called Form1 that has an OnCreate event called FormCreate. unit Unit1; interface uses SysUtils, // Unit containing the FindFirst command Forms, Dialogs; type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); end; var Form1: TForm1; implementation {$R *.dfm} // Include form definitions procedure TForm1.FormCreate(Sender: TObject); var
searchResult : TSearchRec;
begin // Try to find directories above the current directory
SetCurrentDir('..');
if FindFirst('*', faDirectory, searchResult) = 0 then
begin
repeat // Only show directories
if (searchResult.attr and faDirectory) = faDirectory
then ShowMessage('Directory = '+searchResult.Name);
until FindNext(searchResult) <> 0;
// Must free up resources used by these successful finds
FindClose(searchResult);
end;
end; end.
|
Hide full unit code |
Directory = .
Directory = ..
Directory = Bin
Directory = Help
Directory = Projects
Directory = Demos
Directory = Lib
Directory = Objrepos
Directory = MergeModules
Directory = Imports
Directory = Source
Directory = Rave5
Directory = Ocx
|
|