使用 Windows API WriteFileGather
,我正在将文件写入磁盘。我想将新缓冲区附加到现有文件中。防止WriteFileGather
覆盖现有文件的方法是什么?
问问题
250 次
1 回答
2
WriteFileGather
除非您要求,否则永远不会覆盖文件 - 没有隐含的覆盖/附加选项,只有一个“请在文件位置 X 选项写入数据”。
您应该正常打开文件句柄(确保您有权GENERIC_WRITE
访问并至少指定标志标志FILE_FLAG_OVERLAPPED
并FILE_FLAG_NO_BUFFERING
使用CreateFile
然后,您通过使用作为第 5 个参数传入的Offset
和OffsetHigh
成员来设置文件写入的位置。OVERLAPPED
这类似于WriteFile
在异步模式下运行时的工作方式 - 您必须指定要写入的位置。学习如何进行位置异步写入可能更容易,WriteFile
如果WriteFileGather
您需要它的额外功能,请先使用它。
有关文档,请参见此处。
编辑:要回答 Harry 的评论,要获得文件结尾,您可以记住您之前写了多少(假设这是您创建的新文件)或使用距离 0 的 SetFilePointerEx 从 HANDLE 获取当前文件大小和方法 FILE_END 它将返回给您文件的结尾。还有其他获取文件大小的方法,但请注意您可能会得到缓存的答案(例如,如果遍历目录),因此建议使用上述方法。
于 2015-04-20T09:36:15.303 回答