7

我正在设计一个将时间序列数据写入文件的系统。数据是 8 字节的块,分为两个 4 字节部分,时间和有效负载。

根据 MSDN ,如果写入的数据小于一个扇区,则WriteFile 函数是原子的( http://msdn.microsoft.com/en-us/library/aa365747(VS.85).aspx )。

由于文件将只包含这些块(文件没有“结构”,因此无法重建损坏的文件),一个接一个地添加,整个块或什么都不会写入文件至关重要一直。

所以问题是,无论在实际调用 writefile 期间发生什么,我是否正确理解了小于扇区大小的 writefile 总是完全写入磁盘或根本不写入?

4

1 回答 1

9

只要写入不跨越文件中的扇区边界,WriteFile 就是原子的。因此,如果扇区大小为 512 字节,则从文件偏移量 0 开始写入 20 字节将是原子的,但在文件偏移量 500 处写入的相同数据将不是原子的。在您的情况下,写入应该是原子的,因为扇区大小应该是 8 的倍数。

这个 MSDN 博客有更多关于如何在不使用事务 NTFS 的情况下进行原子多扇区写入的信息。

于 2011-01-13T16:57:41.883 回答