原文链接 -> 传送门
函数功能:
FlushFileBuffers 函数用于刷新指定文件的缓冲区,并把全部缓冲数据写入一个文件。
API 函数原型:
注释:_In_ 说明该参数是输入的。
BOOL WINAPI FlushFileBuffers( _In_ HANDLE hFile );
参数解析:
|
参数 |
含义 |
|
hFile |
1. 指定一个打开的文件的句柄 |
返回值:
1. 如果该函数运行成功,则返回值是非 0;
2. 如果该函数运行失败,则返回值是 0。
若想调用更多的错误信息,请调用 GetLastError 函数。
注意:如果 hFile 是一个控制输出的句柄,则该函数运行失败。那是因为控制输出是不用被缓冲的。该函数返回 FALSE,并且 GetLastError 函数返回 ERROR_INVALID_HANDLE。
备注:
1. 典型的情况是 WriteFile 和 WriteFileEx 函数将数据写入到内置缓冲区,然后操作系统定期写入到磁盘或者通讯管道。FlushFileBuffer 函数会将全部的缓冲信息写入到一个指定的设备或管道文件中。
2. 由于系统内硬盘的缓冲作用,当大量的写入操作正在被单独执行时,FlushFileBuffers 函数可能在每次写入一个硬盘驱动设备之后就不能使用了。如果一个应用正在对键盘进行多重写入操作并且还要确保关键数据被写入到了固定媒介中,那么这个应用应该用没有缓冲的 I/Q 来代替对 FlushFileBuffers 函数的频繁调用。想要以不带缓冲的 I/Q 方式打开一个文件,可通过调用带有 FILE_FLAG_NO_BUFFERING 和 FILE_FLAG_WRITE_THROUGH 标识的 CreateFile 函数来实现。这种方式能够防止文件内容被缓存,并且这种方式在每次写入时会刷新硬盘元数据。获取更多信息,请参照 CreateFile 函数。
3. 想要刷新在一个卷上全部打开的文件,可调用带有一个该卷句柄的 FlushFileBuffers 函数。并且调用方必须拥有管理权限。更多信息,请参照 Running with Special Privileges。
4. 当使用 CreatFile 函数打开一个卷时,ipFileName 字符串应该是下面的形式:\\.\x: 或者 \\?\Volume{GUID}。在卷名中不要用反斜线因为那代表一个驱动的根目录。
5. 在 Windows 8 和 Windows Server 2012 中,此功能由以下技术支持:
|
技术 |
是否支持 |
|
Server Message Block (SMB) 3.0 protocol |
是 |
|
SMB 3.0 Transparent Failover (TFO) |
是 |
|
SMB 3.0 with Scale-out File Shares (SO) |
是 |
|
Cluster Shared Volume File System (CsvFS) |
是 |
|
Resilient File System (ReFS) |
是 |
需求:
|
Minimum supported client |
Windows XP [桌面应用程序 | Windows 商店应用程序] |
|
Minimum supported server |
Windows 2003 服务器版 [桌面应用程序 | Windows 商店应用程序] |
|
Minimum supported phone |
Windows Phone 8 |
|
Header |
FileAPI.h (包含于 Windows.h); |
|
Library |
Kernel32.lib |
|
DLL |
Kernel32.dll |




