我用C#复制了一个文件。现在我不能删除它?

时间:2013-04-19 14:04:04

标签: c# winforms file directory

我用C#上的程序复制了一些目录/文件。 现在,我想删除主目录。

所以这是基本代码:

dir.Delete(true);

但我估计UnauthorizedAccessException(访问directories.acrodata,这是一个文件,被拒绝)。

为什么呢?我怎么强迫它?

4 个答案:

答案 0 :(得分:5)

您可能1)在那里有限的安全权限,无法删除文件或2)有一个文件或目录的句柄仍在打开(正在使用中),这会阻止您删除。

Directory.Delete(string);

http://msdn.microsoft.com/en-us/library/62t64db3.aspx

  

UnauthorizedAccessException

     

来电者没有所需的权限。

答案 1 :(得分:1)

首先,您应该将您拥有的任何句柄都放在要删除的文件中。然后,您可以使用以下代码来确保删除只读文件:

public static void DeleteDirectory(string target_dir)
{
    string[] files = Directory.GetFiles(target_dir);
    string[] dirs = Directory.GetDirectories(target_dir);

    foreach (string file in files)
    {
        File.SetAttributes(file, FileAttributes.Normal);
        File.Delete(file);
    }

    foreach (string dir in dirs)
    {
        DeleteDirectory(dir);
    }

    Directory.Delete(target_dir, false);
}

this Stackoverflow topic中的来源和更多信息。

答案 2 :(得分:0)

您尝试删除的目录可能是ReadOnly。因此,将ReadOnly属性设置为false并删除它将起作用。

e.g:

var di = new DirectoryInfo("SomeFolder");
di.Attributes &= ~FileAttributes.ReadOnly;

答案 3 :(得分:0)

我猜测你的复制操作后,你无法正确关闭Streams,这意味着你仍然按照@bland的描述持有文件的句柄。

确保及时处理您的IDisposable,这个问题可能会消失。