关于Directory.delete(path,true) ,一个很奇怪的问题

时间:2022-10-15 00:33:44
我用Directory.delete(path,true)方法删除path和path下所有的子文件夹和文件,
但是会出现异常,异常信息是[ディレクトリ空ではありません]意思也就是说[path这个目录不是空的]


可以肯定的是path这个目录的权限是有的,路径也没问题。

最奇怪的是在xp上程序不会错,在服务器2003上才会出错,而且出错后,在1-5分钟内再次运行程序它就不出错了,而过了很长时间再运行它又错了!!


baidu,google上查了n久好像没人有这种问题,所以看看csdn上有没有高人遇到过,可以指点下。

10 个解决方案

#1


那你就在xp上开发好了,

#2


可能服务器2003上面的安全机制比较复杂!
这台服务器是你自己配置的吗?

#3


啊。。
我也遇到一样的问题。

提示Exception信息是“目录非空”。
MSDN上的函数Directory.Delete(path,true)
提示此信息的说明只有两种情况:
1.后一个参数为false(我已经写为true了,排除)
2.存在具有相同名称且位置由 path 指定的文件。(显然Exception信息是不对的:<)
对于第二种情况,做了个简单的控制台程序的测试下
try{
System.IO.Directory.Delete(@'F:\test',true);
}
catch(Exception e)
{
Console.WriteLine(e.Message);
Consloe.ReadLine();
}

F:\test里面是一些不同的文件夹1,2,3,4,5都含有相同的文件名A.dat
执行程序。
产生上述“目录非空”的信息。。。
再执行一次(备份F:\test),异常又没有了,隔一段时间再执行,又出现异常。。。
无语了。。。
莫不是微软的问题?
各位大侠们有空一起研究一下?

指教,在线恭候。

#4


引用 2 楼 Guyschaos 的回复:
可能服务器2003上面的安全机制比较复杂! 
这台服务器是你自己配置的吗?




我也是这么怀疑的,msdn上是说Directory.delete这个静态类方法操作时会进行安全性检查,但我今天又换了DirectoryInfo.delete(true)试了下,发现也不行。也会出同样的错。

ps:我是这么试验的,在Directory.delete(path,true)那打断点,然后在要删除的目录下拷贝其中一个文件夹,多拷几次,然后再运行,就出错了,不知道这样有没有关系的。


因为我这样操作,是必错的,而自己写的像楼上那样单独作的小程序,是有可能错,也有可能对。非常不确定。

艾,真奇怪阿!

#5


有没有牛人来讲下Directory.delete是怎么删的阿,怎么会出这样的错阿??莫非是bug????

#6


[img=http://www.haizei8.com/attachment/Type_gif/13_575_aef95e1f25e8a3f.gif ][/img]
太奇怪了啊。。

#7


遇到同样的问题,期待解答

#8


那就自己写递归,先把它整空了再删除...

#9


我也遇到过类似情况,经查证是由于在程序中打开了该文件夹下的文件未关闭所致,这里的异常信息不准确引起了很多困扰。

检查一下程序中是否打开过该文件夹下的文件未关闭的情况,如用filestream打开的,未使用using或者dispose

#10


同意9楼
我测试了一下
directory.delete(@"D:\test",true)是没有问题的,前提是这个目录下的任何一个文件夹或者文件在被程序调用后要释放,然后再删除就没有问题,该目录下有多个子目录和多个文件

#1


那你就在xp上开发好了,

#2


可能服务器2003上面的安全机制比较复杂!
这台服务器是你自己配置的吗?

#3


啊。。
我也遇到一样的问题。

提示Exception信息是“目录非空”。
MSDN上的函数Directory.Delete(path,true)
提示此信息的说明只有两种情况:
1.后一个参数为false(我已经写为true了,排除)
2.存在具有相同名称且位置由 path 指定的文件。(显然Exception信息是不对的:<)
对于第二种情况,做了个简单的控制台程序的测试下
try{
System.IO.Directory.Delete(@'F:\test',true);
}
catch(Exception e)
{
Console.WriteLine(e.Message);
Consloe.ReadLine();
}

F:\test里面是一些不同的文件夹1,2,3,4,5都含有相同的文件名A.dat
执行程序。
产生上述“目录非空”的信息。。。
再执行一次(备份F:\test),异常又没有了,隔一段时间再执行,又出现异常。。。
无语了。。。
莫不是微软的问题?
各位大侠们有空一起研究一下?

指教,在线恭候。

#4


引用 2 楼 Guyschaos 的回复:
可能服务器2003上面的安全机制比较复杂! 
这台服务器是你自己配置的吗?




我也是这么怀疑的,msdn上是说Directory.delete这个静态类方法操作时会进行安全性检查,但我今天又换了DirectoryInfo.delete(true)试了下,发现也不行。也会出同样的错。

ps:我是这么试验的,在Directory.delete(path,true)那打断点,然后在要删除的目录下拷贝其中一个文件夹,多拷几次,然后再运行,就出错了,不知道这样有没有关系的。


因为我这样操作,是必错的,而自己写的像楼上那样单独作的小程序,是有可能错,也有可能对。非常不确定。

艾,真奇怪阿!

#5


有没有牛人来讲下Directory.delete是怎么删的阿,怎么会出这样的错阿??莫非是bug????

#6


[img=http://www.haizei8.com/attachment/Type_gif/13_575_aef95e1f25e8a3f.gif ][/img]
太奇怪了啊。。

#7


遇到同样的问题,期待解答

#8


那就自己写递归,先把它整空了再删除...

#9


我也遇到过类似情况,经查证是由于在程序中打开了该文件夹下的文件未关闭所致,这里的异常信息不准确引起了很多困扰。

检查一下程序中是否打开过该文件夹下的文件未关闭的情况,如用filestream打开的,未使用using或者dispose

#10


同意9楼
我测试了一下
directory.delete(@"D:\test",true)是没有问题的,前提是这个目录下的任何一个文件夹或者文件在被程序调用后要释放,然后再删除就没有问题,该目录下有多个子目录和多个文件