Condividi tramite


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 _findcloseprima 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, _wfindfirst32i64e _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, _wfindfirst64i32e _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

Vedi anche

Chiamate di sistema