3

我现在为此苦苦挣扎了一段时间。调用 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 资源管理器中检查了文件属性,就在第三行之后,该文件不再是只读的。检查完所有内容后,我不明白为什么在第四行抛出异常。

4

2 回答 2

5

您确定只有使用File.Copy无法打开的文件复制的文件,而不是目标文件夹中的每个文件吗?这是一个常规的 NTFS 文件夹,还是网络共享?

如果您正在运行防病毒或安全软件,请尝试禁用它。创建文件后,他们通常会打开文件进行扫描。

更新

根据http://msdn.microsoft.com/en-us/library/b9skfh7s.aspx -UnauthorizedAccessException抛出的File.Open不会给出消息'访问路径......被拒绝'。(编辑:我也看不到 File.Copy 的消息,所以这可能是错误的)

我怀疑是您File.Copy因该异常而失败,并且您无权读取源文件或写入目标文件。您可能正在查看突出显示的源代码行,它显示了要执行的下一行。

所以 - 也许你的副本失败了,而不是File.Open?

于 2011-06-06T12:07:14.650 回答
-2

尝试这个!


   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); }
于 2011-06-24T18:33:11.927 回答