System.File.IO.Copy是原子的(另一个进程可以在复制期间访问/读取)吗?

时间:2017-04-18 09:58:50

标签: c# .net system.io.file

我查看了文档https://msdn.microsoft.com/en-us/library/9706cfs5(v=vs.110).aspx,但是我找不到任何关于操作是否原子的东西?原子的意思是另一个文件可以在复制时访问/读取文件。

1 个答案:

答案 0 :(得分:2)

我不认为" atomic"对于你的问题是正确的措辞,除非你在谈论复制作为原子事务的一部分(AFAIK无法在没有P / Invoke CopyFileTransacted的情况下在.NET中完成)。

嗯......那说......在实现细节中,并且假设.NET在不同的平台上运行,那么每个平台上也可能有所不同。

Windows桌面实现上的

File.Copy() 历史只调用Win32 CopyFile。它在这方面的行为是......没有记录,但我们可以检查如何打开句柄。通过快速测试,您可以看到:

  • 源文件已打开FILE_SHARE_READFILE_SHARE_WRITEFILE_SHARE_DELETE
  • 目标文件已打开FILE_SHARE_READFILE_SHARE_WRITE

安全假设:不假设,操作系统,媒体和文件系统可能有不同的规则。也不要认为这是稳定的。

教育合理的假设:您可以假设源文件具有FILE_SHARE_READ并且不对目标文件假设。