我用C#上的程序复制了一些目录/文件。 现在,我想删除主目录。
所以这是基本代码:
dir.Delete(true);
但我估计UnauthorizedAccessException
(访问directories.acrodata,这是一个文件,被拒绝)。
为什么呢?我怎么强迫它?
答案 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,这个问题可能会消失。