【发布时间】:2016-04-05 14:18:55
【问题描述】:
代码
这是我正在调试的一些 C# 代码的一个非常简化的伪代码版本。
// 1) Lots of files and directories are copied
// 2) Some unnecessary files are deleted
// 3) Try to delete an unnecessary directory
string stubbornFolder = @"C:\...\Stubborn"; // This folder was created during step 1 above.
Directory.Delete(stubbornFolder);
问题
当它点击 Directory.Delete 时,会抛出以下异常。
System.IO.IOException: Access to the path 'C:\...\Stubborn' is denied.
备注
删除目录“C:...\test”也可以正常工作。 test 和 Stubborn 似乎都具有相同的安全设置。两个目录都是空的。
-
如果我手动删除然后使用 Windows 资源管理器重新创建 Stubborn(并使用调试器跳过复制代码),删除将按预期进行。
- 即使在应用程序运行时手动删除也有效。
查看this question 中建议的访问控制类型似乎表明所有规则都设置为允许。
不必要的文件删除按预期工作。
以管理员身份运行可执行文件与不以管理员身份运行可执行文件没有任何区别。
似乎没有任何应用程序使用
Stubborn作为其工作目录。
帮助!
有什么可能导致这种情况的想法吗?
【问题讨论】:
-
你有什么程序让文件夹在某处保持打开状态吗?
-
这个文件夹是怎么创建的?通过同一个应用程序?
-
如果您尝试直接使用 Win32 API 会怎样? msdn.microsoft.com/en-us/library/aa365488(VS.85).aspx mhubal 的评论显示了一个 c# 版本
-
@Steve 我不这么认为。我可以手动移动、重命名和删除文件夹。
-
Directory.Delete(stubbornFolder);之前有没有代码引用 stubbornFolder (或其中的任何文件)并且不放手?另外,您提到您可以手动重命名/移动/删除目录,是在您关闭程序之后吗?你有没有试过在你的程序已经被称为 Directory.Delete 之后运行它?