Windows 7 x64 SP1 .NET Framework 3.5 SP1
我编写了简单的代码,但它在时间上有效,每隔一次传递就会发生异常。 ......即:它适用于偶数开始:2,4,6,8,e.t.c。但是奇怪的开始我得到例外:1,3,5,7,9,e.t.c。
// localMenuDirName is 'GPSM\AdminCAD'.
DirectoryInfo menuDir = new DirectoryInfo(Path.Combine(Environment.GetFolderPath(
Environment.SpecialFolder.Programs), localMenuDirName));
if (menuDir.Exists) {
FileInfo[] files = menuDir.GetFiles("*", SearchOption.AllDirectories);
foreach (FileInfo file in files) {
file.IsReadOnly = false;
}
sb.AppendLine(String.Format("We begin deleting the '{0}' directory", menuDir.FullName));
Directory.Delete(menuDir.FullName, true); // Get Exception here
// menuDir.Delete(true); // here I get same exception.
输出文字:
我们开始删除'C:\ Users \ andrey.bushman \ AppData \ Roaming \ Microsoft \ Windows \ Start 菜单\程序\ GPSM \ AdminCAD'目录
异常:目录不为空。
但目录为空(所有文件已被删除)。我打开资源管理器并查看它。
下一段代码总能正常工作:
// localMenuDirName is 'GPSM\AdminCAD'.
DirectoryInfo menuDir = new DirectoryInfo(Path.Combine(Environment.GetFolderPath(
Environment.SpecialFolder.Programs), localMenuDirName));
if (menuDir.Exists) {
FileInfo[] files = menuDir.GetFiles("*", SearchOption.AllDirectories);
foreach (FileInfo file in files) {
file.IsReadOnly = false;
}
sb.AppendLine(String.Format("We begin deleting the '{0}' directory", menuDir.FullName));
try {
Directory.Delete(menuDir.FullName, true);
}
catch {
// Try again... Now it works without exception!
Directory.Delete(menuDir.FullName, true);
}
sb.AppendLine("Operation was executed successfully.");
为什么会这样?
答案 0 :(得分:1)
Directory.Delete
可能会因IOException
而失败,因此有多种可能的选项。
根据{{3}}
存在由path指定的相同名称和位置的文件。
- 或者 - path指定的目录是只读的,或者递归为false而path不是空目录。
- 或 - 目录是应用程序的当前工作目录。
- 或 - 目录包含只读文件。
- 或 - 该目录正由另一个进程使用。目录或其中一个文件上有一个打开的句柄,操作系统是Windows XP或更早版本。这个打开句柄可以通过枚举目录和文件来实现。有关更多信息,请参见如何:枚举目录和文件。
换句话说:检查目录的开放处理程序,检查隐藏文件。