Partager via


_find, _wfind, fonctions

La recherche de ces fonctions recherche et arrête les recherches sur des noms de fichiers spécifiques :

Notes

La fonction _findfirst fournit des informations à propos de la première instance d'un nom de fichier correspondant au fichier spécifié dans l'argument _findfirst. 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 sur les fichiers dans une structure finddata_t _, définie dans IO.h. Les diverses fonctions de la famille utilisent beaucoup de 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 la création du fichier (– 1L pour les systèmes de fichiers FAT). Cet horaire est stockée au format UTC. Pour convertir 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). Cet horaire est stockée au format UTC. Pour convertir vers l'heure locale, utilisez localtime_s.

  • time_t time_write
    heure de la dernière opération d'écriture du fichier. Cet horaire est stockée au format UTC. Pour convertir vers l'heure locale, utilisez localtime_s.

  • _fsize_t size
    Longueur du fichier en octets.

  • char name [ _MAX_PATH]
    Nom se terminant par NULL d'un fichier ou d'un répertoire correspondant, sans le chemin d'accès.

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

_MAX_PATH est défini dans Stdlib.h en 260 octets.

Vous ne pouvez pas spécifier les attributs cibles (par exemple _A_RDONLY) pour limiter l'opération de recherche. Ces attributs sont retournés dans le champ de attrib de la structure _finddata_t et peut prendre les valeurs suivantes (définies dans IO.h). Les utilisateurs ne doivent pas compter sur le fait que ce sont les uniques valeurs possibles pour le champ attrib.

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

  • _A_HIDDEN
    fichiers masqués Généralement pas dans avec la commande de DIR, sauf si vous avez utilisé l'option /AH. Retourne des informations sur les fichiers et les fichiers dotés de cet attribut. Valeur : 0x02

  • _A_NORMAL
    Normal. Le fichier n'a pas d'autre attribut défini et peut être lu ou écrit sans restriction. Valeur : 0x00

  • _A_RDONLY
    En lecture seule. Impossible d'ouvrir le fichier en é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. D'ordinaire jamais vu avec la commande DIR, à moins que l'option /A ou /A:S soit utilisée. Valeur : 0x04

_findnext recherche le nom suivant, le cas échéant, qui pondère l'argument filespec spécifié dans un appel précédent à _findfirst. L'argument fileinfo doit afficher une structure initialisée par l'instruction qui précède _findfirst. Si une correspondance est trouvée, le contenu de la structure fileinfo est modifié comme décrit plus haut. Sinon, il demeure inchangé. _findclose ferme le descripteur de recherche et libère toutes les ressources associées pour _findfirst et _findnext. Le descripteur retourné par _findfirst ou _findnext doit d'abord être passé à _findclose, avant que les opérations de modification, telles que la suppression, puissent être exécutées sur les répertoires qui constituent les chemins d'accès transmis à celles-ci.

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

_wfindfirst et _wfindnext sont des versions de caractères larges de _findfirst et de _findnext. L'argument de structure des versions de caractères larges a le type de données _wfinddata_t, défini dans IO.h et dans Wchar.h. Les champs de ce type de données sont identiques à celles du type de données _finddata_t, sauf que dans _wfinddata_t le champ nom est de type wchar_t au lieu de type char. Sinon, _wfindfirst et _wfindnext se comportent de la même façon que _findfirst et _findnext.

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

Les fonctions _findfirst32i64, _findnext32i64, _wfindfirst32i64, et _wfindnext32i64 se comportent également de manière identique aux versions de type time 32 bits de ces fonctions à l'exception de les longueurs 64 bits de retour d'utilisation. Les fonctions _findfirst64i32, _findnext64i32, _wfindfirst64i32, ainsi que _wfindnext64i32 utilisent le type d'heure 64 bits mais utilise des fichiers de longueur 32 bits. Ces fonctions utilisent des variantes appropriées de type_finddata_t dans lesquels les champs ont des types différents pour le temps et la taille du fichier.

_finddata_t est en réalité une macro qui prend _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 de 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 );
   }
}
  

Voir aussi

Référence

Appels système