Partager via


Fonctions de recherche de nom de fichier

Ces fonctions recherchent des noms de fichiers spécifiés et arrêtent ces recherches :

Notes

La fonction _findfirst fournit des informations sur la première instance d’un nom de fichier correspondant au fichier spécifié dans l’argument filespec . Vous pouvez utiliser dans filespec n’importe quelle combinaison de caractères génériques prise en charge par le système d’exploitation hôte.

Les fonctions retournent des informations de fichier dans une _finddata_t structure, qui est définie dans IO.h. Les diverses fonctions de la famille utilisent de nombreuses variations sur la structure _finddata_t . La structure de base _finddata_t inclut les éléments suivants :

unsigned attrib
Attribut de fichier.

time_t time_create
Heure de création de fichiers (-1L pour les systèmes de fichiers FAT). Cette heure est stockée au format UTC. Pour la conversion en heure locale, utilisez localtime_s.

time_t time_access
Heure du dernier accès au fichier (-1L pour les systèmes de fichiers FAT). Cette heure est stockée au format UTC. Pour la conversion en heure locale, utilisez localtime_s.

time_t time_write
Heure de la dernière opération d’écriture dans le fichier. Cette heure est stockée au format UTC. Pour la conversion en heure locale, utilisez localtime_s.

_fsize_t size
Longueur du fichier en octets.

char name[ _MAX_PATH] NULL-terminated name of matched file or directory, without the path.

Dans les systèmes de fichiers qui ne prennent pas en charge la création et la dernière heure d’accès d’un fichier, telles que le système FAT, les time_create champs sont time_access toujours -1L.

_MAX_PATH est défini en Stdlib.h tant que 260 octets.

Vous ne pouvez pas spécifier d’attributs cibles (par exemple _A_RDONLY) pour limiter l’opération de recherche. Ces attributs sont retournés dans le attrib champ de la _finddata_t structure et peuvent avoir les valeurs suivantes (définies dans IO.h). Les utilisateurs ne doivent pas compter sur ces attributs étant les seules valeurs possibles pour le attrib champ.

_A_ARCH
Archive. Définissez chaque fois que le fichier est modifié et effacé par la BACKUP commande. Valeur : 0x20.

_A_HIDDEN
Fichier caché. Pas souvent vu avec la DIR commande, sauf si vous utilisez l’option /AH . Retourne des informations sur les fichiers normaux et les fichiers qui ont cet attribut. Valeur : 0x02.

_A_NORMAL
Normal. Aucun autre attribut n’est défini pour le fichier et il est possible d’y effectuer des opérations de lecture ou d’écriture sans restriction. Valeur : 0x00.

_A_RDONLY
Lecture seule. Impossible d’ouvrir le fichier pour l’écriture et un fichier portant le même nom ne peut pas être créé. Valeur : 0x01.

_A_SUBDIR
Sous-répertoire. Valeur : 0x10.

_A_SYSTEM
Fichier système. Pas généralement vu avec la DIR commande, sauf si l’option ou /A:S l’option /A est utilisée. Valeur : 0x04.

_findnext recherche le nom suivant, le cas échéant, correspondant à l’argument filespec spécifié dans un appel antérieur à _findfirst. L’argument fileinfo doit pointer vers une structure initialisée par l’appel précédent à _findfirst. Si une correspondance est trouvée, le contenu de la structure fileinfo est modifié comme décrit précédemment. Sinon, il reste inchangé. _findclose ferme le handle de recherche spécifié et libère toutes les ressources associées à la fois pour _findfirst et _findnext. Le handle retourné par _findfirst ou _findnext doit tout d’abord être transmis à _findclose, avant de pouvoir effectuer une opération de modification, telle que la suppression, sur les répertoires qui constituent les chemins transmis.

Vous pouvez imbriquer les fonctions _find . Par exemple, si un appel à _findfirst ou _findnext trouve le fichier qui est un sous-répertoire, une nouvelle recherche peut être lancée avec un autre appel à _findfirst ou _findnext.

_wfindfirst et _wfindnext sont des versions à caractères larges de _findfirst et _findnext. L’argument de structure des versions de caractères larges a le _wfinddata_t type de données, qui est défini dans IO.h et dans Wchar.h. Les champs de ce type de données sont identiques aux champs du _finddata_t type de données, sauf que dans _wfinddata_t le name champ est de type wchar_t au lieu de type char. Sinon, _wfindfirst et _wfindnext se comporter de manière identique à _findfirst et _findnext.

_findfirst et _findnext utilisent le type de temps 64 bits. Si vous devez utiliser l’ancien type de temps 32 bits, vous pouvez définir _USE_32BIT_TIME_T. Les versions de ces fonctions qui ont le 32 suffixe dans leurs noms utilisent le type de temps 32 bits, et celles avec le 64 suffixe utilisent le type de temps 64 bits.

Les fonctions _findfirst32i64, _findnext32i64, _wfindfirst32i64et _wfindnext32i64 se comportent également de la même façon que les versions de type de temps 32 bits de ces fonctions, mais elles utilisent et retournent des longueurs de fichiers 64 bits. Les fonctions _findfirst64i32, _findnext64i32, _wfindfirst64i32et _wfindnext64i32 utilisent le type de temps 64 bits, mais des longueurs de fichiers 32 bits. Ces fonctions utilisent des variations appropriées du type _finddata_t où les champs ont des types différents pour l’heure et la taille du fichier.

_finddata_t est en fait une macro qui correspond à _finddata64i32_t (ou _finddata32_t si _USE_32BIT_TIME_T est défini). Le tableau suivant récapitule les différentes variations de _finddata_t:

Structure Type de temps Type de taille du fichier
_finddata_t, _wfinddata_t __time64_t _fsize_t
_finddata32_t, _wfinddata32_t __time32_t _fsize_t
__finddata64_t, _wfinddata64_t __time64_t __int64
_finddata32i64_t, _wfinddata32i64_t __time32_t __int64
_finddata64i32_t, _wfinddata64i32_t __time64_t _fsize_t

_fsize_t est un typedef pour unsigned long (32 bits).

Exemple

// crt_find.c
// This program uses the 32-bit _find functions to print
// a list of all files (and their attributes) with a .C extension
// in the current directory.

#include <stdio.h>
#include <stdlib.h>
#include <io.h>
#include <time.h>

int main( void )
{
   struct _finddata_t c_file;
   intptr_t hFile;

   // Find first .c file in current directory
   if( (hFile = _findfirst( "*.c", &c_file )) == -1L )
      printf( "No *.c files in current directory!\n" );
   else
   {
      printf( "Listing of .c files\n\n" );
      printf( "RDO HID SYS ARC  FILE         DATE %25c SIZE\n", ' ' );
      printf( "--- --- --- ---  ----         ---- %25c ----\n", ' ' );
      do {
         char buffer[30];
         printf( ( c_file.attrib & _A_RDONLY ) ? " Y  " : " N  " );
         printf( ( c_file.attrib & _A_HIDDEN ) ? " Y  " : " N  " );
         printf( ( c_file.attrib & _A_SYSTEM ) ? " Y  " : " N  " );
         printf( ( c_file.attrib & _A_ARCH )   ? " Y  " : " N  " );
         ctime_s( buffer, _countof(buffer), &c_file.time_write );
         printf( " %-12s %.24s  %9ld\n",
            c_file.name, buffer, c_file.size );
      } while( _findnext( hFile, &c_file ) == 0 );
      _findclose( hFile );
   }
}
Listing of .c files

RDO HID SYS ARC  FILE         DATE                           SIZE
--- --- --- ---  ----         ----                           ----
N   N   N   Y   blah.c       Wed Feb 13 09:21:42 2002       1715
N   N   N   Y   test.c       Wed Feb 06 14:30:44 2002        312

Voir aussi

Appels système