Condividi tramite


Funzioni _find, _wfind

Queste funzioni cercano e chiudono le ricerche dei nomi file specificati:

Note

La funzione _findfirst fornisce informazioni sulla prima istanza di un nome file che corrisponde al file specificato nell'argomento di filespec. È possibile utilizzare in filespec qualsiasi combinazione di caratteri jolly supportata dal sistema operativo host.

Le funzioni restituiscono le informazioni del file in una struttura _finddata_t definita in IO.h. Le varie funzioni della famiglia utilizzano molte varianti sulla struttura _finddata_t. La struttura _finddata_t di base include i seguenti elementi:

  • unsigned attrib
    Attributo file

  • time_t time_create
    Ora della creazione del file (- 1L per i file system FAT). L'ora viene archiviata in formato UTC. Per convertirla nell'ora locale, utilizzare localtime_s.

  • time_t time_access
    Ora dell'ultimo accesso al file (- 1L per i file system FAT). L'ora viene archiviata in formato UTC. Per convertirla nell'ora locale, utilizzare localtime_s.

  • time_t time_write
    L'ora dell'ultima scrittura sul file. L'ora viene archiviata in formato UTC. Per convertirla nell'ora locale, utilizzare localtime_s.

  • _fsize_t size
    Lunghezza del file in byte.

  • char name [ _MAX_PATH]
    Nome con terminazione null del corrispondente file o directory, senza il percorso.

In file system che non supportano le ore di creazione e di ultimo accesso di un file, ad esempio il sistema FAT, i campi time_create e time_access sono sempre - 1L.

_MAX_PATH è definito in Stdlib.h come 260 byte.

Non è possibile specificare attributi target (come _A_RDONLY) per limitare l'operazione di ricerca. Questi attributi vengono restituiti nel campo attrib della struttura di _finddata_t e possono disporre dei seguenti valori (definiti in IO.h). Gli utenti non devono fare affidamento sul fatto che questi siano gli unici valori possibili per il campo di attrib.

  • _A_ARCH
    Archiviare. Da impostare ogni volta che il file viene modificato e cancellato dal comando BACKUP. Valore: 0x20.

  • _A_HIDDEN
    File nascosti. In genere non vengono visualizzati con il comando DIR, a meno che non si utilizzi l'opzione /AH. Restituisce informazioni su file normali e file con questo attributo. Valore: 0x02.

  • _A_NORMAL
    Normale. Nel file non sono stati impostati altri attributi ed è possibile leggere o scrivere sul file senza restrizione. Valore: 0x00.

  • _A_RDONLY
    Sola lettura. Il file non può essere aperto per la scrittura e non può essere creato un file con lo stesso nome. Valore: 0x01.

  • _A_SUBDIR
    Sottodirectory. Valore: 0x10.

  • _A_SYSTEM
    File di sistema. In genere non vengono visualizzati con il comando DIR, a meno che venga utilizzata l'opzione /A o /A:S. Valore: 0x04.

_findnext cerca, se presente, il nome successivo che corrisponde all'argomento filespec specificato in una chiamata precedente a _findfirst. L'argomento di fileinfo deve puntare a una struttura inizializzata dalla chiamata precedente a _findfirst. Se viene individuata una corrispondenza, il contenuto della struttura fileinfo viene modificato come descritto in precedenza. In caso contrario, viene lasciato invariato. _findclose chiude un handle di ricerca specificato e libera tutte le risorse collegate sia per _findfirst che _findnext. L'handle restituito da _findfirst o da _findnext deve essere prima di tutto passato a _findclose, prima che le operazioni di modifica, ad esempio l'eliminazione, possano essere eseguite sulle directory che costituiscono i percorsi che vengono passati ad essi.

È possibile annidare le funzioni _find. Ad esempio, se una chiamata a _findfirst o a _findnext trova il file che è una sottodirectory, una nuova ricerca può essere avviata con un'altra chiamata a _findfirst o a _findnext.

_wfindfirst e _wfindnext sono versioni a caratteri estesi di _findfirst e di _findnext. L'argomento della struttura della versione a caratteri estesi ha il tipo di dati _wfinddata_t, definito in IO.h e in Wchar.h. I campi di questo tipo di dati sono uguali a quelli del tipo di dati di _finddata_t, con la differenza che in _wfinddata_t il campo del nome è di tipo wchar_t anziché di tipo char. Altrimenti _wfindfirst e _wfindnext si comportano in modo identico a _findfirst e a _findnext.

_findfirst e _findnext utilizzano il tipo di ora a 64 bit. Se è necessario utilizzare il tipo di ora precedente a 32 bit, è possibile definire _USE_32BIT_TIME_T. Le versioni di queste funzioni con il suffisso 32 nei relativi nomi utilizzano il tipo di ora a 32 bit e quelli con il suffisso 64 utilizzano il tipo di ora a 64 bit.

Anche le funzioni _findfirst32i64, _findnext32i64, _wfindfirst32i64 e _wfindnext32i64 si comportano in modo identico a alle versioni del tipo di ora a 32 bit di queste funzioni tranne per il fatto che utilizzano e restituiscono le lunghezze del file in 64 bit. Le funzioni _findfirst64i32, _findnext64i32, _wfindfirst64i32 e _wfindnext64i32utilizzano le lunghezze del file a 32 bit di tipo ma utilizzano i tipi di tempo a 64 bit. Tali funzioni utilizzano variazioni appropriate del tipo _finddata_t in cui i campi hanno tipi diversi per l'ora e la dimensione del file.

_finddata_t è in realtà una macro che dà viene valutata a _finddata64i32_t (o a _finddata32_t se _USE_32BIT_TIME_T è definito). Nella tabella riportata di seguito vengono riepilogate le versioni di _finddata_t:

Struttura

Tipo time

Tipo di dimensione del file

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

Vedere anche

Riferimenti

Chiamate di sistema