Funzione FlushFileBuffers (fileapi.h)

Scarica i buffer di un file specificato e causa la scrittura di tutti i dati memorizzati nel buffer in un file.

Sintassi

BOOL FlushFileBuffers(
  [in] HANDLE hFile
);

Parametri

[in] hFile

Handle per il file aperto.

L'handle file deve avere il diritto di accesso GENERIC_WRITE . Per altre informazioni, vedere Sicurezza file e diritti di accesso.

Se hFile è un handle a un dispositivo di comunicazione, la funzione scarica solo il buffer di trasmissione.

Se hFile è un handle alla fine del server di una pipe denominata, la funzione non restituisce finché il client non ha letto tutti i dati memorizzati nel buffer dalla pipe.

Valore restituito

Se la funzione ha esito positivo, il valore restituito è diverso da zero.

Se la funzione ha esito negativo, il valore restituito è zero. Per informazioni dettagliate sull'errore, chiamare GetLastError.

La funzione ha esito negativo se hFile è un handle per l'output della console. Questo perché l'output della console non viene memorizzato nel buffer. La funzione restituisce FALSE e GetLastError restituisce ERROR_INVALID_HANDLE.

Commenti

In genere le funzioni WriteFile e WriteFileEx scrivono dati in un buffer interno che il sistema operativo scrive in un disco o in una pipe di comunicazione regolarmente. La funzione FlushFileBuffers scrive tutte le informazioni memorizzate nel buffer per un file specificato nel dispositivo o nella pipe.

A causa delle interazioni di memorizzazione nella cache dei dischi all'interno del sistema, la funzione FlushFileBuffers può essere inefficiente quando ogni scrittura viene eseguita separatamente in un dispositivo unità disco. Se un'applicazione esegue più operazioni di scrittura su disco e deve anche garantire che i dati critici vengano scritti in supporti persistenti, l'applicazione deve usare I/O non memorizzati in modo frequente anziché chiamare Spesso FlushFileBuffers. Per aprire un file per I/O non memorizzati, chiamare la funzione CreateFile con i flag di FILE_FLAG_NO_BUFFERING e FILE_FLAG_WRITE_THROUGH . In questo modo il contenuto del file viene memorizzato nella cache e scarica i metadati su disco con ogni scrittura. Per altre informazioni, vedere CreateFile.

Per scaricare tutti i file aperti in un volume, chiamare FlushFileBuffers con un handle per il volume. Il chiamante deve avere privilegi amministrativi. Per altre informazioni, vedere Esecuzione con privilegi speciali.

Quando si apre un volume con CreateFile, la stringa lpFileName deve essere la forma seguente: \.\x: o \?\Volume{GUID}. Non usare una barra rovesciata finale nel nome del volume, perché indica la directory radice di un'unità.

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 con scalabilità orizzontale (SO)
File system del volume condiviso del cluster (CsvFS)
File system resiliente (ReFS)
 

Esempi

Per un esempio, vedere Server pipe multithreaded.

Requisiti

   
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 (includere Windows.h)
Libreria Kernel32.lib
DLL Kernel32.dll

Vedere anche

CreateFile

Funzioni di gestione file

WriteFile

WriteFileEx