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

chu*_*w87 6 c#

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

如果我有以下两行;

TextWriter tw = new StreamWriter(txtPath,true);

File.Copy(OriginalPath, DestinationPath));

tw.WriteLine("blah");
Run Code Online (Sandbox Code Playgroud)

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

Tre*_*van 10

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

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

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


Pet*_*hie 8

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