Funzioni di ricerca dei nomi file
Queste funzioni eseguono e terminano le ricerche per i nomi di file specificati:
Osservazioni:
La funzione _findfirst
fornisce informazioni sulla prima istanza di un nome file che corrisponde al file specificato nell'argomento filespec
. In filespec
è possibile usare qualsiasi combinazione di caratteri jolly supportata dal sistema operativo host.
Le funzioni restituiscono informazioni sul file in una _finddata_t
struttura, definita in IO.h
. Le diverse funzioni della famiglia di prodotti usano più varianti nella struttura _finddata_t
. La struttura _finddata_t
di base include i seguenti elementi:
unsigned attrib
Attributo del file.
time_t time_create
Ora di creazione dei file (-1L
per i file system FAT). Questo orario viene archiviato in formato UTC. Per convertirlo nell'ora locale, usare localtime_s
.
time_t time_access
Ora dell'ultimo accesso ai file (-1L
per i file system FAT). Questo orario viene archiviato in formato UTC. Per convertirlo nell'ora locale, usare localtime_s
.
time_t time_write
Ora dell'ultima scrittura nel file. Questo orario viene archiviato in formato UTC. Per convertirlo nell'ora locale, usare localtime_s
.
_fsize_t size
Lunghezza del file in byte.
char name
[ _MAX_PATH
] NULL
- nome terminato di file o directory corrispondenti, senza il percorso.
Nei file system che non supportano la creazione e l'ultima ora di accesso di un file, ad esempio il sistema FAT, i time_create
campi e time_access
sono sempre -1L
.
_MAX_PATH
è definito in Stdlib.h
come 260 byte.
Non è possibile specificare gli attributi di destinazione (ad esempio _A_RDONLY
) per limitare l'operazione di ricerca. Questi attributi vengono restituiti nel attrib
campo della _finddata_t
struttura e possono avere i valori seguenti (definiti in IO.h
). Gli utenti non devono basarsi su questi attributi essendo gli unici valori possibili per il attrib
campo.
_A_ARCH
Archivio. Impostare ogni volta che il file viene modificato e cancellato dal BACKUP
comando . Valore: 0x20
.
_A_HIDDEN
File nascosto. Non viene spesso visualizzato con il DIR
comando, a meno che non si usi l'opzione /AH
. Restituisce informazioni sui file con questo attributo e sui file normali. Valore: 0x02
.
_A_NORMAL
Normale. File non contiene altri set di attributi e può essere letto o scritto senza alcuna restrizione. Valore: 0x00
.
_A_RDONLY
Sola lettura. Non è possibile aprire il file per la scrittura e non è possibile creare un file con lo stesso nome. Valore: 0x01
.
_A_SUBDIR
Sottodirectory. Valore: 0x10
.
_A_SYSTEM
File di sistema. Non viene in genere visualizzato con il DIR
comando , a meno che non venga usata l'opzione /A
o /A:S
. Valore: 0x04
.
_findnext
trova il nome successivo, se presente, che corrisponde all'argomento filespec
specificato in una precedente chiamata a _findfirst
. L'argomento fileinfo
deve puntare a una struttura inizializzata dalla chiamata precedente a _findfirst
. Se viene trovata una corrispondenza, i contenuti della struttura fileinfo
vengono modificati come descritto in precedenza. In caso contrario, rimane invariato. _findclose
chiude l'handle di ricerca specificato e rilascia tutte le risorse associate per _findfirst
e _findnext
. L'handle restituito da _findfirst
o _findnext
deve essere passato a _findclose
prima di eseguire operazioni di modifica, ad esempio l'eliminazione, nelle directory che formano i percorsi passati a tali operazioni.
È possibile annidare le funzioni _find
. Ad esempio, se una chiamata a _findfirst
o _findnext
trova il file che corrisponde a una sottodirectory, è possibile avviare una nuova ricerca con un'altra chiamata a _findfirst
o _findnext
.
_wfindfirst
e _wfindnext
sono versioni a caratteri wide di _findfirst
e _findnext
. L'argomento della struttura delle versioni a caratteri wide ha il _wfinddata_t
tipo di dati , definito in IO.h
e in Wchar.h
. I campi di questo tipo di dati sono gli stessi dei campi del _finddata_t
tipo di dati, ad eccezione del fatto che nel name
_wfinddata_t
campo è di tipo anziché di tipo wchar_t
char
. In caso contrario, _wfindfirst
e _wfindnext
si comportano in modo identico a _findfirst
e _findnext
.
_findfirst
e _findnext
usano il tipo Time a 64 bit. Se è necessario usare il precedente tipo Time a 32 bit, è possibile definire _USE_32BIT_TIME_T
. Le versioni di queste funzioni con il 32
suffisso nei nomi usano il tipo time a 32 bit e quelle con il 64
suffisso usano il tipo time a 64 bit.
Anche le funzioni _findfirst32i64
, _findnext32i64
, _wfindfirst32i64
e _wfindnext32i64
si comportano in modo analogo alle versioni di tipo Time a 32 bit ma usano e restituiscono lunghezze di file a 64 bit. Anche le funzioni _findfirst64i32
, _findnext64i32
, _wfindfirst64i32
e _wfindnext64i32
usano il tipo Time a 64 bit ma lunghezze di file a 32 bit. Queste funzioni usano le varianti appropriate del tipo _finddata_t
in cui i campi hanno tipi diversi per Time e File size.
_finddata_t
è una macro che restituisce _finddata64i32_t
(o _finddata32_t
se _USE_32BIT_TIME_T
è definito). La tabella seguente riepiloga le variazioni in _finddata_t
:
Struttura | Tipo Time | Tipo File size |
---|---|---|
_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
è typedef
per unsigned long
(32 bit).
Esempio
// 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