我现在正在努力解决这个问题。我调用File.Copy方法后无法访问文件。这是我试过的:
File.Copy(sourceFile, destinationFile, true);
FileStream fs = File.Open(destinationFile, FileMode.Open);
我在第二行收到UnauthorizedAccessException。它说:拒绝访问路径......我也尝试过here提出的建议但是没有用。
感谢任何帮助。
编辑:这是我发现的。如果我这样做:File.Copy(sourceFile, destinationFile, true);
FileStream fs = File.Open(destinationFile, FileMode.Open, FileAccess.Read);
它不会抛出异常。我尝试访问的文件是只读的。所以,我试图删除这样的只读属性:
File.Copy(sourceFile, destinationFile, true);
FileInfo fileInfo = new FileInfo(destinationFile);
fileInfo.IsReadOnly = false;
FileStream fs = File.Open(destinationFile, FileMode.Open, FileAccess.ReadWrite);
我得到了和以前一样的例外。顺便说一句,我检查了我是否可以手动打开文件并进行编辑,我可以。当然,当我取消选中只读复选框时。我在调试时检查了Windows资源管理器中的文件属性,紧接在第三行之后,文件不再是只读的。把所有这些都放在检查中,我不明白为什么在第四行抛出异常。
答案 0 :(得分:5)
您确定仅使用File.Copy
复制的文件无法打开,而不是目标文件夹中的每个文件?这是一个常规的NTFS文件夹,还是网络共享?
如果您运行的是防病毒软件或安全软件,请尝试禁用它。创建文件后,他们通常会打开一个文件进行扫描。
更新
根据UnauthorizedAccessException
- File.Open
引发的File.Copy
不会发出消息'访问路径...被拒绝'。 (编辑:我也看不到File.Copy的消息,所以这可能是错的)
我怀疑您的File.Open
因该异常而失败,并且您无权读取源文件或编写目标文件。您可能正在查看突出显示的源代码行,该代码行显示了要执行的下一行。
所以 - 也许你的副本失败了,而不是{{1}}?
答案 1 :(得分:-1)
试试这个!
private bool CheckFileHasCopied(string FilePath)
{
try
{
if (File.Exists(FilePath))
{
using (File.OpenRead(FilePath))
{
return true;
}
}
else
{
return false;
}
}
catch (Exception)
{
Thread.Sleep(2000);
return CheckFileHasCopied(FilePath);
}
}
if (CheckFileHasCopied(destinationFile)) { File.Delete(sourceFile); }