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)
群集共享卷文件系统 (CSV)
弹性文件系统 (ReFS)
 

示例

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

要求

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

另请参阅

CreateFile

文件管理函数

WriteFile

WriteFileEx