我在删除目录时遇到了一些重大问题。我正在构建一个ADMIN工具来删除我的客户创建的目录,然后要求删除它们。你会认为这很简单:
using (var context = Impersonator.LogOn(user, password, domain))
{
try
{
dir = new DirectoryInfo(path);
dir.Delete(true);
}
catch (Exception ex)
{
return string.Format("Error:{0}", ex.Message);
}
finally
{
context.Undo();
}
}
现在无论我做什么我都无法删除文件夹。响应总是“拒绝访问路径”。我已经加倍检查路径,登录所有内容。
请告诉我我做错了什么。
服务器:win2008网络版 ASP.NET:4
答案 0 :(得分:1)
我最近解决了这个相同的问题,首先删除文件夹中的所有文件,然后删除文件夹。
对我而言,有关访问的错误消息具有误导性。
有时我在Windows资源管理器中删除文件时也遇到此问题。偶尔,它会删除目录,直到删除其中的文件为止。我从来没有想过为什么。
这是我的代码:
private static void FileCleanup(string directoryName)
{
try
{
string[] filenames = Directory.GetFiles(directoryName);
foreach (string filename in filenames)
{
File.Delete(filename);
}
if (Directory.Exists(directoryName))
{
Directory.Delete(directoryName);
}
}
catch (Exception ex)
{
// you might want to log it, or swallow any exceptions here
}
}
答案 1 :(得分:0)
错误消息说明了一切。 “拒绝访问路径” - >您正在运行的进程可能没有该文件夹的权限
编辑:或正在使用某些文件...
答案 2 :(得分:0)
也许代码示例here会指向正确的方向。您需要在模拟上下文中运行才能以该用户身份执行操作。
答案 3 :(得分:0)
你知道,我将摆脱捕获泛型SystemException,而是捕获Delete方法将抛出的一些特定异常。它可能有助于调试这样的问题。
答案 4 :(得分:0)
请原谅我,但是:
1)您是否可以使用单元测试来测试用于删除目录的方法?使用测试在您的计算机上本地运行时,确保删除代码有效。
2)您可能被拒绝的原因是因为文件正在使用中。如果以前的帖子之一中的index.asp文件是由IIS启动的,那么它仍然可以使用,因此不希望被删除。如果IIS有你的文件,那么你需要停止IIS服务或等到它发布。
3)文件是否只读?
4)确保您使用的是物理路径,而不是只有IIS可以理解的相对路径。删除文件/目录将无法理解虚拟目录。
另一个注意事项......为什么不在数据库中引用这些文件,并进行软删除?看到它的网络,用户将无法分辨。让DB告诉应用程序您可以看到哪些文件。这样,数据丢失的可能性很小。