_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 fichiertime_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 );
}
}