WriteFileGather - 将缓冲区附加到文件

时间:2015-04-20 06:31:44

标签: c++ windows winapi writefile

使用Windows API的WriteFileGather,我正在向磁盘写入文件。 我想将新缓冲区附加到现有文件中。 阻止WriteFileGather覆盖现有文件的方法是什么?

1 个答案:

答案 0 :(得分:2)

WriteFileGather永远不会覆盖该文件,除非您要求它 - 没有隐含的覆盖/附加选项,只有#请在文件位置X选项中写入数据'。

您应该正常打开文件句柄(确保您已获得GENERIC_WRITE访问权限,并使用FILE_FLAG_OVERLAPPED <指定至少标记FILE_FLAG_NO_BUFFERINGCreateFile的标记/ p>

然后,使用您传入的Offset的{​​{1}}和OffsetHigh成员作为第5个参数,设置文件写入的位置。

这类似于OVERLAPPED在异步模式下运行时的工作方式 - 必须指定要写入的位置。使用WriteFile可能更容易学习如何使用WriteFile执行位置异步写入,如果需要额外的功能,则先移至WriteFileGather

有关文档,请参阅here

编辑:要回答Harry的评论,要获得文件结尾,您可以记住之前写过多少(假设这是您创建的新文件)或从HANDLE获取当前文件大小使用距离为0的SetFilePointerEx和方法FILE_END,它将返回给您文件的末尾。还有其他获取文件大小的方法,但要注意你可能会得到一个缓存的答案(例如,如果在目录上进行迭代),所以建议使用以上方法。