File.Copy方法使文件不可访问

时间:2011-06-06 12:04:25

标签: c# file-access

我现在正在努力解决这个问题。我调用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资源管理器中的文件属性,紧接在第三行之后,文件不再是只读的。把所有这些都放在检查中,我不明白为什么在第四行抛出异常。

2 个答案:

答案 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); }