我使用一个简单的代码:
File.Copy(source, destination, true);
将文件从UNC路径(源)复制到本地路径(目标)。第三个参数使得如果文件已经存在,它将被覆盖。
这可以达到99%。但是,当源文件被锁定时,我有时会看到此错误:
该进程无法访问文件' \ xxxx \ aaaa.dll'因为它正被另一个进程使用。
然后目标文件仍然消失。我只能认为File.Copy
首先删除了本地文件,然后当它尝试复制时,它失败并抛出异常?
就是这样,我该如何防止这种情况?
答案 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向我显示,当源文件在打开时抛出共享冲突时,目标文件不被访问。
当源文件被锁定时,显示的代码甚至不会触摸目标文件,更不用说删除它了。