File.Copy仅在复制文件后返回吗?

时间:2014-01-29 19:04:58

标签: c#

我无法找到这个问题的答案,也不确定如何测试。

如果我有以下两行;

TextWriter tw = new StreamWriter(txtPath,true);

File.Copy(OriginalPath, DestinationPath));

tw.WriteLine("blah");

第3行是否等到File.Copy完全完成,或者File.Copy还在运行时是否可以启动第3行?

4 个答案:

答案 0 :(得分:10)

是的,它会等待,因为File.Copy()是同步方法调用/文件复制操作。

您可以免费下载适用于Windows桌面的Visual Studio 2013 Express Edition,以测试此C#代码。 Download link

在Visual Studio中创建一个新的控制台应用程序项目,并在Main()方法声明中运行您的代码。如果您使用代码复制5-10GB文件,您会注意到Copy()方法的调用需要一些时间才能返回。

答案 1 :(得分:7)

我不清楚为什么要问这个问题,但是File.Copy是一个“同步”方法 - 所以在操作系统认为复制文件之前它不会返回。但是,请注意,因为根据执行复制的驱动器,写入可能会被缓存而不能完全写入磁盘。该磁盘上的后续操作将考虑到这一点(例如,如果您然后尝试将第一个目标复制到新目标,那将起作用);但如果在File.Copy返回后磁盘断电,可能没有将所有数据写入磁盘。这是某些SSD驱动器的一个特殊问题。

答案 2 :(得分:3)

该框架通常设计得很好。如果特定方法在返回时不会完成其工作,它将返回一些您可以确定操作何时完成的内容(即TaskTask<T>或{{ 1}})

IAsyncResult是一个File.Copy方法,什么都不返回,所以期望它在返回时完成了它的工作。

答案 3 :(得分:1)

根据ILSpyFile.Copy method在内部调用Win32 CopyFile function,而后者又是同步函数。

所以在我看来,它完全同步,而不是异步。因此,文件完全复制后,您的第3行称为