File.copy删除目标文件?可能吗?

时间:2014-07-28 21:11:34

标签: c#

我使用一个简单的代码:

File.Copy(source, destination, true);

将文件从UNC路径(源)复制到本地路径(目标)。第三个参数使得如果文件已经存在,它将被覆盖。

这可以达到99%。但是,当源文件被锁定时,我有时会看到此错误:

  

该进程无法访问文件' \ xxxx \ aaaa.dll'因为它正被另一个进程使用。

然后目标文件仍然消失。我只能认为File.Copy首先删除了本地文件,然后当它尝试复制时,它失败并抛出异常?

就是这样,我该如何防止这种情况?

2 个答案:

答案 0 :(得分:3)

无法重现。

File.Create(@"c:\test\source.txt");
File.Create(@"c:\test\target.txt");
var stream = 
    File.Open(@"c:\test\source.txt", FileMode.Open, FileAccess.Read);
File.Copy(@"c:\test\source.txt", @"c:\test\target.txt", true);

抛出异常,但保留目标文件。

答案 1 :(得分:2)

ProcMon向我显示,当源文件在打开时抛出共享冲突时,目标文件被访问。

当源文件被锁定时,显示的代码甚至不会触摸目标文件,更不用说删除它了。

相关问题