Funzione FlushFileBuffers (fileapi.h)
Scarica i buffer di un file specificato e fa in modo che tutti i dati memorizzati nel buffer vengano scritti in un file.
Sintassi
BOOL FlushFileBuffers(
[in] HANDLE hFile
);
Parametri
[in] hFile
Handle per il file aperto.
L'handle di file deve avere il diritto di accesso GENERIC_WRITE. Per altre informazioni, vedere File Security and Access Rights.
Se hFile è un handle per un dispositivo di comunicazione, la funzione scarica solo il buffer di trasmissione.
Se hFile è un handle alla fine del server di una named pipe, la funzione non restituisce finché il client non legge 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 ottenere informazioni estese sull'errore, chiamare GetLastError.
La funzione ha esito negativo se hFile è un handle per l'output della console. Ciò è dovuto al fatto che l'output della console non viene memorizzato nel buffer. La funzione restituisce FALSEe GetLastError restituisce ERROR_INVALID_HANDLE.
Osservazioni
In genere WriteFile e WriteFileEx funzioni scrivono dati in un buffer interno che il sistema operativo scrive regolarmente su un disco o una pipe di comunicazione. 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 del disco all'interno del sistema, la funzione FlushFileBuffers può essere inefficiente quando viene usata dopo ogni scrittura in un dispositivo unità disco quando vengono eseguite separatamente molte scritture. 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 operazioni di I/O non memorizzate nel buffer anziché chiamare spesso FlushFileBuffers. Per aprire un file per operazioni di I/O non memorizzate, chiamare la funzione CreateFile con i flag 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 disporre di privilegi amministrativi. Per altre informazioni, vedere esecuzione con privilegi speciali.
Quando si apre un volume con CreateFile, la stringa lpFileName deve essere il formato 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 | Sostenuto |
---|---|
Protocollo SMB (Server Message Block) 3.0 | Sì |
SMB 3.0 Transparent Failover (TFO) | Sì |
SMB 3.0 con condivisioni file con scalabilità orizzontale (SO) | Sì |
Cluster Shared Volume File System (CsvFS) | Sì |
Resilient File System (ReFS) | Sì |
Esempi
Per un esempio, vedere server pipe multithreading.
Fabbisogno
Requisito | Valore |
---|---|
client minimo supportato | Windows XP [app desktop | App UWP] |
server minimo supportato | Windows Server 2003 [app desktop | App UWP] |
piattaforma di destinazione | Finestre |
intestazione |
fileapi.h (include Windows.h) |
libreria |
Kernel32.lib |
dll | Kernel32.dll |