Condividi tramite


Funzione FindFirstFileW (fileapi.h)

Cerca in una directory un file o una sottodirectory con un nome corrispondente a un nome specifico (o un nome parziale se vengono utilizzati caratteri jolly).

Per specificare attributi aggiuntivi da usare in una ricerca, usare la funzione FindFirstFileEx .

Per eseguire questa operazione come operazione transazionata, usare la funzione FindFirstFileTransacted .

Sintassi

HANDLE FindFirstFileW(
  [in]  LPCWSTR            lpFileName,
  [out] LPWIN32_FIND_DATAW lpFindFileData
);

Parametri

[in] lpFileName

La directory o il percorso e il nome del file. Il nome file può includere caratteri jolly, ad esempio un asterisco (*) o un punto interrogativo (?).

Questo parametro non deve essere NULL, una stringa non valida (ad esempio, una stringa vuota o una stringa mancante nel carattere Null di terminazione) o terminare con una barra rovesciata finale (\).

Se la stringa termina con un carattere jolly, un punto (.) o un nome di directory, l'utente deve disporre delle autorizzazioni di accesso alla radice e a tutte le sottodirectory nel percorso.

Per impostazione predefinita, il nome è limitato a MAX_PATH caratteri. Per estendere questo limite a 32.767 caratteri wide, anteporre "\\?\" al percorso. Per altre informazioni, vedere Denominazione di file, percorsi e spazi dei nomi.

Suggerimento

A partire da Windows 10, versione 1607, è possibile acconsentire esplicitamente a rimuovere la limitazione MAX_PATH senza anteporre "\?\". Per informazioni dettagliate, vedere la sezione "Limitazione massima della lunghezza del percorso" di Denominazione di file, percorsi e spazi dei nomi .

[out] lpFindFileData

Puntatore alla struttura WIN32_FIND_DATA che riceve informazioni su un file o una directory trovata.

Valore restituito

Se la funzione ha esito positivo, il valore restituito è un handle di ricerca usato in una chiamata successiva a FindNextFile o FindClose e il parametro lpFindFileData contiene informazioni sul primo file o directory trovato.

Se la funzione ha esito negativo o non riesce a individuare i file dalla stringa di ricerca nel parametro lpFileName , il valore restituito è INVALID_HANDLE_VALUE e il contenuto di lpFindFileData è indeterminato. Per ottenere informazioni sull'errore estese, chiamare la funzione GetLastError .

Se la funzione ha esito negativo perché non è possibile trovare file corrispondenti, la funzione GetLastError restituisce ERROR_FILE_NOT_FOUND.

Commenti

La funzione FindFirstFile apre un handle di ricerca e restituisce informazioni sul primo file trovato dal file system con un nome corrispondente al modello specificato. Può trattarsi o meno del primo file o della directory visualizzato in un'applicazione di elenco di directory ,ad esempio il comando dir, quando viene specificato lo stesso modello di stringa del nome file. Il motivo è che FindFirstFile non esegue l'ordinamento dei risultati della ricerca. Per altre informazioni, vedere FindNextFile.

L'elenco seguente identifica alcune altre caratteristiche di ricerca:

  • La ricerca viene eseguita rigorosamente sul nome del file, non su alcun attributo, ad esempio una data o un tipo di file (per altre opzioni, vedere FindFirstFileEx).
  • La ricerca include i nomi di file lunghi e brevi.
  • Un tentativo di aprire una ricerca con una barra rovesciata finale ha sempre esito negativo.
  • Il passaggio di una stringa, NULL o una stringa vuota non valida per il parametro lpFileName non è un uso valido di questa funzione. I risultati in questo caso non sono definiti.
Nota In rari casi o in un sistema caricato pesantemente, le informazioni sugli attributi dei file nei file system NTFS potrebbero non essere correnti al momento della chiamata di questa funzione. Per assicurarsi di ottenere gli attributi del file system NTFS correnti, chiamare la funzione GetFileInformationByHandle .
 
Dopo aver stabilito l'handle di ricerca, è possibile usarlo per cercare altri file che corrispondono allo stesso modello usando la funzione FindNextFile .

Quando l'handle di ricerca non è più necessario, chiuderlo usando la funzione FindClose , non CloseHandle.

Come indicato in precedenza, non è possibile usare una barra rovesciata finale (\) nella stringa di input lpFileName per FindFirstFile, pertanto potrebbe non essere ovvio come eseguire la ricerca nelle directory radice. Se si desidera visualizzare i file o ottenere gli attributi di una directory radice, si applicano le opzioni seguenti:

  • Per esaminare i file in una directory radice, è possibile usare "C:\*" e scorrere la directory usando FindNextFile.
  • Per ottenere gli attributi di una directory radice, usare la funzione GetFileAttributes .
Nota In sospeso la stringa "\\?\" non consente l'accesso alla directory radice.
 

Nelle condivisioni di rete è possibile usare un lpFileName nel formato seguente: "\\Server\Share\*". Tuttavia, non è possibile utilizzare un lpFileName che punta alla condivisione stessa; Ad esempio, "\\Server\Share" non è valido.

Per esaminare una directory che non è una directory radice, usare il percorso di tale directory, senza una barra rovesciata finale. Ad esempio, un argomento di "C:\Windows" restituisce informazioni sulla directory "C:\Windows", non su una directory o un file in "C:\Windows". Per esaminare i file e le directory in "C:\Windows", usare lpFileName "C:\Windows\*".

Tenere presente che un altro thread o processo potrebbe creare o eliminare un file con questo nome tra il momento in cui si esegue la query per il risultato e il momento in cui si agisce sulle informazioni. Se si tratta di un potenziale problema per l'applicazione, una possibile soluzione consiste nell'usare la funzione CreateFile con CREATE_NEW (che ha esito negativo se il file esiste) o OPEN_EXISTING (che ha esito negativo se il file non esiste).

Se si scrive un'applicazione a 32 bit per elencare tutti i file in una directory e l'applicazione può essere eseguita in un computer a 64 bit, è necessario chiamare la funzione Wow64DisableWow64FsRedirection prima di chiamare FindFirstFile e chiamare Wow64RevertWow64FsRedirection dopo l'ultima chiamata a FindNextFile. Per altre informazioni, vedere Reindirizzamento del file system.

Se il percorso punta a un collegamento simbolico, il buffer WIN32_FIND_DATA contiene informazioni sul collegamento simbolico, non sulla destinazione.

In Windows 8 e Windows Server 2012 questa funzione è supportata dalle tecnologie seguenti.

Tecnologia Supportato
Protocollo SMB (Server Message Block) 3.0
Failover trasparente SMB 3.0 (TFO)
SMB 3.0 con condivisioni file di scalabilità orizzontale (SO)
File system del volume condiviso cluster (CsvFS)
Resilient File System (ReFS)
 

Esempi

L'esempio C++ seguente illustra un uso minimo di FindFirstFile.

#include <windows.h>
#include <tchar.h>
#include <stdio.h>

void _tmain(int argc, TCHAR *argv[])
{
   WIN32_FIND_DATA FindFileData;
   HANDLE hFind;

   if( argc != 2 )
   {
      _tprintf(TEXT("Usage: %s [target_file]\n"), argv[0]);
      return;
   }

   _tprintf (TEXT("Target file is %s\n"), argv[1]);
   hFind = FindFirstFile(argv[1], &FindFileData);
   if (hFind == INVALID_HANDLE_VALUE) 
   {
      printf ("FindFirstFile failed (%d)\n", GetLastError());
      return;
   } 
   else 
   {
      _tprintf (TEXT("The first file found is %s\n"), 
                FindFileData.cFileName);
      FindClose(hFind);
   }
}

Per un altro esempio, vedere Elenco dei file in una directory.

Nota

L'intestazione fileapi.h definisce FindFirstFile come alias che seleziona automaticamente la versione ANSI o Unicode di questa funzione in base alla definizione della costante del preprocessore UNICODE. La combinazione dell'utilizzo dell'alias indipendente dalla codifica con il codice che non è indipendente dalla codifica può causare mancate corrispondenze che generano errori di compilazione o di runtime. Per altre informazioni, vedere Convenzioni per i prototipi di funzioni.

Requisiti

Requisito Valore
Client minimo supportato Windows XP [app desktop | App UWP]
Server minimo supportato Windows Server 2003 [app desktop | App UWP]
Piattaforma di destinazione Windows
Intestazione fileapi.h (include Windows.h)
Libreria Kernel32.lib
DLL Kernel32.dll

Vedere anche

Funzioni di gestione file

FindClose

FindFirstFileEx

FindFirstFileTransacted

Findnextfile

GetFileAttributes

SetFileAttributes

Collegamenti simbolici

Uso delle intestazioni di Windows

WIN32_FIND_DATA