Função FlushFileBuffers (fileapi.h)

Libera os buffers de um arquivo especificado e faz com que todos os dados armazenados em buffer sejam gravados em um arquivo.

Sintaxe

BOOL FlushFileBuffers(
  [in] HANDLE hFile
);

Parâmetros

[in] hFile

Um identificador para o arquivo aberto.

O identificador de arquivo deve ter o acesso GENERIC_WRITE correto. Para obter mais informações, consulte Segurança de arquivos e Direitos de Acesso.

Se hFile for um identificador para um dispositivo de comunicação, a função liberará apenas o buffer de transmissão.

Se hFile for um identificador para a extremidade do servidor de um pipe nomeado, a função não retornará até que o cliente leia todos os dados armazenados em buffer do pipe.

Valor retornado

Se a função for bem-sucedida, o valor retornado será diferente de zero.

Se a função falhar, o valor retornado será zero. Para obter informações de erro estendidas, chame GetLastError.

A função falhará se hFile for um identificador para a saída do console. Isso ocorre porque a saída do console não é armazenada em buffer. A função retorna FALSE e GetLastError retorna ERROR_INVALID_HANDLE.

Comentários

Normalmente, as funções WriteFile e WriteFileEx gravam dados em um buffer interno que o sistema operacional grava em um disco ou pipe de comunicação regularmente. A função FlushFileBuffers grava todas as informações em buffer de um arquivo especificado no dispositivo ou pipe.

Devido às interações de cache de disco dentro do sistema, a função FlushFileBuffers pode ser ineficiente quando usada após cada gravação em um dispositivo de unidade de disco quando muitas gravações estão sendo executadas separadamente. Se um aplicativo estiver executando várias gravações em disco e também precisar garantir que os dados críticos sejam gravados em mídia persistente, o aplicativo deverá usar E/S sem erros em vez de chamar o FlushFileBuffers com frequência. Para abrir um arquivo para E/S sem cofres, chame a função CreateFile com os sinalizadores FILE_FLAG_NO_BUFFERING e FILE_FLAG_WRITE_THROUGH . Isso impede que o conteúdo do arquivo seja armazenado em cache e libera os metadados para o disco com cada gravação. Para obter mais informações, consulte CreateFile.

Para liberar todos os arquivos abertos em um volume, chame FlushFileBuffers com um identificador para o volume. O chamador deve ter privilégios administrativos. Para obter mais informações, confira Executar com privilégios especiais.

Ao abrir um volume com CreateFile, a cadeia de caracteres lpFileName deve ser a seguinte forma: \.\x: ou \?\Volume{GUID}. Não use uma barra invertida à direita no nome do volume, pois isso indica o diretório raiz de uma unidade.

No Windows 8 e Windows Server 2012, essa função é compatível com as tecnologias a seguir.

Tecnologia Com suporte
Protocolo SMB (SMB) 3.0 Sim
TFO (Failover transparente) do SMB 3.0 Sim
SMB 3.0 com compartilhamentos de arquivos de expansão (SO) Sim
Sistema de arquivos de Volume Compartilhado Clusterizado (CsvFS) Sim
ReFS (Sistema de Arquivos Resiliente) Sim
 

Exemplos

Para obter um exemplo, consulte Servidor de Pipe Multithreaded.

Requisitos

   
Cliente mínimo com suporte Windows XP [aplicativos da área de trabalho | aplicativos UWP]
Servidor mínimo com suporte Windows Server 2003 [aplicativos da área de trabalho | Aplicativos UWP]
Plataforma de Destino Windows
Cabeçalho fileapi.h (inclua Windows.h)
Biblioteca Kernel32.lib
DLL Kernel32.dll

Confira também

CreateFile

Funções de gerenciamento de arquivos

WriteFile

WriteFileEx