我正在使用VB6和Win32 API将数据写入文件,此功能用于导出数据,因此磁盘写入性能是我考虑的关键因素。因此,在调用 CreateFile
打开文件时,我使用 FILE_FLAG_NO_BUFFERING
和 FILE_FLAG_WRITE_THROUGH
选项。
FILE_FLAG_NO_BUFFERING
要求我使用自己的缓冲区并将数据以磁盘扇区大小的倍数写入文件,这通常没有问题,除了数据的最后一部分(如果是)扇区大小的精确倍数将包括文件中的字符零填充,一旦写入最后一个 block ,如何设置文件大小以不包括这些字符零?
我可以使用SetEndOfFile
,但这需要我关闭文件并重新打开它,而不使用FILE_FLAG_NO_BUFFERING
。我见过有人谈论 NtSetInformationFile
但我找不到如何在 VB6 中使用和声明它。 SetFileInformationByHandle
可以完全满足我的要求,但它仅在 Windows Vista 中可用,我的应用程序需要与以前版本的 Windows 兼容。
最佳答案
我相信 SetEndOfFile 是唯一的方法。
我同意 Mike G. 的观点,即无论是否使用 FILE_FLAG_NO_BUFFERING,都应该对代码进行测试。现代操作系统上的 Windows 文件缓冲非常有效。
关于winapi - 如何写入使用 FILE_FLAG_NO_BUFFERING 打开的文件的结尾?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/147996/