我正在尝试使用C#生成一个巨大的文本文件,另一个进程不断查看该位置并尝试拾取该文件(如果可用).
为了使下面的文件原子是以下步骤:
1 - Write to file : Filename_temp.txt
2 - Check if Filename.txt already exists then Delete
3 - Do a File.Move to the same destination
From filename : Filename_temp.txt
TO : Filename.txt
Run Code Online (Sandbox Code Playgroud)
由于C#没有重命名,我必须依赖File.Move,这是否确保移动操作是原子的还是有另一种方法来实现这种原子性?
Hei*_*nzi 12
根据MSDN博客文章如何在文件中进行原子写入,重命名NTFS文件是一个原子操作:
解决方案?让我们记住元数据的变化是原子的.重命名就是这种情况.因此,我们可以只执行对临时文件的写入,并且在我们知道写入在磁盘上(已完成并刷新)之后,我们可以将旧文件与新文件交换.
当然,这并不能保证File.Move只发出NTFS重命名操作,但我想不出它应该做更复杂的事情的正当理由.