FlushFileBuffers 函数 (fileapi.h)
刷新指定文件的缓冲区并将所有缓冲数据写入文件。
语法
BOOL FlushFileBuffers(
[in] HANDLE hFile
);
参数
[in] hFile
打开文件的句柄。
文件句柄必须具有 GENERIC_WRITE 访问权限。 有关详细信息,请参阅 文件安全性和访问权限。
如果 hFile 是通信设备的句柄,则 函数仅刷新传输缓冲区。
如果 hFile 是命名管道服务器端的句柄,则在客户端从管道读取所有缓冲数据之前,函数不会返回。
返回值
如果该函数成功,则返回值为非零值。
如果函数失败,则返回值为零。 要获得更多的错误信息,请调用 GetLastError。
如果 hFile 是控制台输出的句柄,则函数失败。 这是因为控制台输出未缓冲。 函数返回 FALSE, GetLastError 返回 ERROR_INVALID_HANDLE。
备注
通常 ,WriteFile 和 WriteFileEx 函数将数据写入操作系统定期写入磁盘或通信管道的内部缓冲区。 FlushFileBuffers 函数将指定文件的所有缓冲信息写入设备或管道。
由于系统内的磁盘缓存交互,在每次写入磁盘驱动器设备后,当单独执行多次写入时, FlushFileBuffers 功能可能会效率低下。 如果应用程序正在对磁盘执行多次写入,并且还需要确保将关键数据写入永久性媒体,则应用程序应使用无缓冲区 I/O,而不是频繁调用 FlushFileBuffers。 若要为无缓冲区 I/O 打开文件,请使用 FILE_FLAG_NO_BUFFERING 和 FILE_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 |
另请参阅
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈