FINDFIRST |
Trouve le premier |
---|---|
Free Pascal | SysUtils |
Syntaxe
Function FindFirst(Const Path:String;Attr:LongInt;Out Rslt:TSearchRec):LongInt; |
Paramètres
Nom | Description | ||
---|---|---|---|
Path | Ce paramètre permet d'indiquer le nom du/des fichier(s) à rechercher | ||
Attr | Ce paramètre permet d'indiquer l'attribut de recherche : | ||
Constante | Description | ||
faReadOnly | Cette constante permet d'indiquer l'attribut de lecture seulement | ||
faHidden | Cette constante permet d'indiquer l'attribut caché | ||
faSysFile | Cette constante permet d'indiquer l'attribut système | ||
faVolumeID | Cette constante permet d'indiquer l'attribut de nom d'unité disque. Cette attribut n'est supporté que par Windows avec uniquement des partitions FAT (FAT12 ou FAT16). | ||
faDirectory | Cette constante permet d'indiquer l'attribut de nom de répertoire | ||
faArchive | Cette constante permet d'indiquer l'attribut d'archive | ||
faAnyFile | Cette constante permet d'indiquer l'attribut de n'importe quel fichier | ||
Rslt | Ce paramètre permet d'indiquer l'enregistrement contenant le résultat de la recherche. Voici les champs retourner : | ||
Champ | Type de données | Description | |
Time | LongInt | Ce champ permet d'indiquer le temps du fichier. | |
Size | Int64 | Ce champ permet d'indiquer la taille du fichier. | |
Attr | LongInt | Ce champ permet d'indiquer les attributs du fichier. | |
Name | TFilename | Ce champ permet d'indiquer le nom du fichier (le dossier n'est pas inclus). | |
ExcludeAttr | LongInt | Ce champ permet d'indiquer les attributs étendues du fichier. | |
FindHandle | Pointer | Ce champ permet d'indiquer le gestionnaire interne du système d'exploitation (n'est pas utilisé). | |
Mode | TMode | Ce champ permet d'indiquer le mode du fichier UNIX. Ce champ est uniquement utilisé pour les systèmes d'exploitation de style UNIX. | |
PathOnly | AnsiString | Ce champ permet d'indiquer uniquement le dossier du fichier sans son nom ni son extension. |
Retour
Valeur | Description |
---|---|
0 | Cette valeur permet d'indiquer qu'un autre enregistrement de résultat est disponible après celui-ci. |
<> 0 | Ces valeurs permettent d'indiquer qu'il n'y a plus d'autre enregistrement de disponible. |
Description
Cette fonction permet de rechercher le premier occurrence (fichier ou répertoire) contenu dans un répertoire de fichier spécifié.
Remarques
- ATTENTION ! Il existe également une procédure avec le même nom situé dans l'unité DOS.
- Si vous souhaitez obtenir le reste de la liste des fichiers d'un dossier, vous devrez utiliser la fonction «FINDNEXT» afin de compléter votre recherche.
- Si vous indiquer un attribut «faDirectory», il est possible que l'on vous retournes de fichiers et des répertoires.
- Si vous ne faite pas d'appel à la fonction «FINDNEXT», vous devez libérer la mémoire à l'aide de la fonction «FINDCLOSE» ! Si vous ne le faite pas, vous allez gaspiller énormément de mémoire et de ressource.
- Bien que l'attribut de volume existe dans les constantes (faVolumeID), elle n'est pas supporté par les systèmes d'exploitation actuel, il faut plutôt un appel directe spécifiquement au système d'exploitation afin d'obtenir la bonne information. Bien que la fonction ne retournera pas d'erreur pour un attribut faVolumeID, elle retournera une valeur erroné comme par exemple «bootmgr». Sous Windows, vous devriez donc utiliser une entrée d'API GetVolumeInformationA avec la définition suivante :
- Program GetLabelSamples;
- Uses SysUtils;
- Function GetVolumeInformation(lpRootPathName: PChar; lpVolumeNameBuffer: PChar; nVolumeNameSize: DWORD; lpVolumeSerialNumber: PDWORD;
- Var lpMaximumComponentLength, lpFileSystemFlags: DWORD; lpFileSystemNameBuffer: PChar; nFileSystemNameSize: DWORD): LongBool; stdcall;
- External 'kernel32.dll' name 'GetVolumeInformationA';
- Function GetVolumeLabel(Dsk:Byte):String;
- Var
- lpMaximumComponentLength, lpFileSystemFlags:DWORD;
- lpRootPathName,lpVolumeNameBuffer:Array[0..MAX_PATH] of Char;
- Begin
- StrPCopy(lpRootPathName,Char(Dsk+64) + ':\');
- GetVolumeInformation(lpRootPathName,lpVolumeNameBuffer,SizeOf(lpVolumeNameBuffer),NIL,lpMaximumComponentLength,lpFileSystemFlags,NIL,0);
- GetVolumeLabel := StrPas(lpVolumeNameBuffer);
- End;
- BEGIN
- WriteLn('Etiquette de l''unité C:',GetVolumeLabel(3));
- END.
Vous obtiendrez un résultat semblable à ceci :
Etiquette de l'unité C:GLADIRSous les systèmes d'exploitation OS2 ou eComStation, vous devriez utiliser la fonction d'API DosQueryFSInfo.
Exemple
Voici un permettant de tester la présence de trois fichiers :
- Program FindFirstSamples;
-
- Uses SysUtils;
-
- Function FileExist(Const Name:String):Boolean;
- Var
- Rec:TSearchRec;
- Begin
- FileExist:=FindFirst(Name,faArchive,Rec) = 0;
- FindClose(Rec);
- End;
-
- BEGIN
- Write('Le fichier C:\windows\system32\drivers\etc\hosts');
- If FileExist('C:\windows\system32\drivers\etc\hosts')Then WriteLn(' existe')
- Else WriteLn(' n''existe pas');
- Write('Le fichier C:\config.sys');
- If FileExist('C:\config.sys')Then WriteLn(' existe')
- Else WriteLn(' n''existe pas');
- Write('Le fichier C:\gladir.txt');
- If FileExist('C:\gladir.txt')Then WriteLn(' existe')
- Else WriteLn(' n''existe pas');
- END.
on obtiendra le résultat semblable suivant :
Le fichier C:\windows\system32\drivers\etc\hosts existeLe fichier C:\config.sys existe
Le fichier C:\gladir.txt n'existe pas
Voir également
Dernière mise à jour : Samedi, le 18 juillet 2015