Compartilhar via


Função FlushFileBuffers (fileapi.h)

Libera os buffers de um arquivo especificado e faz com que todos os dados 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 de Segurança de Arquivos e Direitos de Acesso.

Se hFile for um identificador para um dispositivo de comunicação, a função libera 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 tenha lido todos os dados em buffer do pipe.

Valor de retorno

Se a função for bem-sucedida, o valor retornado não será 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 está em buffer. A função retorna FALSE e GetLastError retorna ERROR_INVALID_HANDLE.

Observações

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 não armazenada em vez de chamar com frequência FlushFileBuffers. Para abrir um arquivo para E/S não oferecida, 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, consulte Em execução 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 no Windows Server 2012, essa função é compatível com as tecnologias a seguir.

Tecnologia Suportado
Protocolo SMB (Bloco de Mensagens do Servidor) 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 de Cluster (CsvFS) Sim
ReFS (Sistema de Arquivos Resiliente) Sim
 

Exemplos

Para obter um exemplo, consulte servidor de pipe multithreaded.

Requisitos

Requisito Valor
de cliente com suporte mínimo Windows XP [aplicativos da área de trabalho | Aplicativos UWP]
servidor com suporte mínimo Windows Server 2003 [aplicativos da área de trabalho | Aplicativos UWP]
da Plataforma de Destino Windows
cabeçalho fileapi.h (inclua Windows.h)
biblioteca Kernel32.lib
de DLL Kernel32.dll

Consulte também

CreateFile

Funções de gerenciamento de arquivos

writefile

WriteFileEx