在Windows中有效且原子地交换两个文件

时间:2015-11-05 19:10:16

标签: c# winapi

我保持原子性的天真解决方案是在两个文件上打开流并通过临时文件交换内容。但是,据我所知,当两个文件存在于同一驱动器上时,File.Move效率更高,因为实际上没有复制数据。

不幸的是,C#的File.Move要求目标文件不存在,因此不可能用于两个文件的原子交换。

有没有办法确保在交换过程中不会触及任何文件,仍然可以提高重命名同一驱动器上存在的文件的效率。

最好是,我正在寻找一个使用C#的解决方案,但如果有更低级别的方法来实现这一点,我不反对使用P / Invoke。我的理解是OSX可以通过interchangeata()实现这一点,而Linux可以通过renameat2()实现这一点。对Windows有类似的东西吗?

0 个答案:

没有答案