File.Copy方法使文件不可访问
本文关键字:访问 文件 Copy 方法 File | 更新日期: 2023-09-27 17:58:32
我已经为此挣扎了一段时间。调用file.Copy方法后,我无法访问文件。以下是我尝试过的:
File.Copy(sourceFile, destinationFile, true);
FileStream fs = File.Open(destinationFile, FileMode.Open);
我在第二行收到UnauthorizedAccessException。上面写着:通路。。。被拒绝。我也尝试过这里的建议,但并没有奏效。
感谢您的帮助。
编辑:这是我发现的。如果我这样做:
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资源管理器中的文件属性,就在第三行之后,文件不再是只读的。在检查了所有这些之后,我不明白为什么在第四行抛出异常。
是否确定只有使用File.Copy
复制的文件不能打开,而不是目标文件夹中的每个文件?这是一个普通的NTFS文件夹,还是网络共享?
如果你正在运行防病毒或安全软件,请尝试禁用它。创建文件后,他们通常会打开文件进行扫描。
更新
根据http://msdn.microsoft.com/en-us/library/b9skfh7s.aspx-File.Open
引发的UnauthorizedAccessException
不会提供消息"Access to the path…"。。。被拒绝"(编辑:我也看不到File.Copy的消息,所以这可能是错误的)
我怀疑是您的File.Copy
出现异常而失败,并且您没有读取源文件或写入目标文件的权限。您可能正在查看高亮显示的源代码行,它显示了要执行的下一行。
所以——也许你的拷贝失败了,而不是File.Open
?
试试这个!
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); }