FlushFileBuffers 函数 (fileapi.h)

刷新指定文件的缓冲区,并导致所有缓冲数据写入文件。

语法

BOOL FlushFileBuffers(
  [in] HANDLE hFile
);

参数

[in] hFile

打开文件的句柄。

文件句柄必须具有 GENERIC_WRITE 访问权限。 有关详细信息,请参阅 文件安全和访问权限

如果 hFile 是通信设备的句柄,则函数只会刷新传输缓冲区。

如果 hFile 是命名管道的服务器端的句柄,则在客户端从管道读取所有缓冲数据之前,该函数不会返回。

返回值

如果函数成功,则返回值为非零。

如果函数失败,则返回值为零。 若要获取扩展的错误信息,请调用 GetLastError

如果 hFile 是控制台输出的句柄,则函数将失败。 这是因为控制台输出未缓冲。 该函数返回 FALSEGetLastError 返回 ERROR_INVALID_HANDLE

言论

通常,WriteFileWriteFileEx 函数将数据写入操作系统定期写入磁盘或通信管道的内部缓冲区。 FlushFileBuffers 函数将指定文件的所有缓冲信息写入设备或管道。

由于系统中的磁盘缓存交互,FlushFileBuffers 函数在每次写入磁盘驱动器设备后使用时,在单独执行许多写入操作时可能会效率低下。 如果应用程序正在对磁盘执行多个写入,并且还需要确保将关键数据写入永久性媒体,则应用程序应使用无缓冲区 I/O,而不是频繁调用 FlushFileBuffers。 若要打开无缓冲区 I/O 的文件,请使用 FILE_FLAG_NO_BUFFERINGFILE_FLAG_WRITE_THROUGH 标志调用 CreateFile 函数。 这样可以防止文件内容被缓存,并通过每次写入将元数据刷新到磁盘。 有关详细信息,请参阅 CreateFile

若要刷新卷上所有打开的文件,请使用卷的句柄调用 FlushFileBuffers。 调用方必须具有管理权限。 有关详细信息,请参阅 使用特殊特权运行。

使用 CreateFile打开卷时,lpFileName 字符串应采用以下格式:\.\x: 或 \\?\Volume{GUID}。 不要在卷名称中使用尾随反斜杠,因为这表示驱动器的根目录。

在 Windows 8 和 Windows Server 2012 中,以下技术支持此函数。

科技 支持
服务器消息块 (SMB) 3.0 协议 是的
SMB 3.0 透明故障转移 (TFO) 是的
具有横向扩展文件共享的 SMB 3.0 (SO) 是的
群集共享卷文件系统 (CsvFS) 是的
可复原文件系统 (ReFS) 是的
 

例子

有关示例,请参阅 多线程管道服务器

要求

要求 价值
最低支持的客户端 Windows XP [桌面应用 |UWP 应用]
支持的最低服务器 Windows Server 2003 [桌面应用 |UWP 应用]
目标平台 窗户
标头 fileapi.h (包括 Windows.h)
Kernel32.lib
DLL Kernel32.dll

另请参阅

CreateFile

文件管理功能

WriteFile

WriteFileEx