| 
| 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
 
 |  |