无法使用Directory.Delete(路径,true)删除目录及目录下的文件,提示System.IO.IOException: 目录不是空的

看到网上有两种说法导致此类情况,一说是Directory.Delete(路径,true)虽然微软对此方法的说明文档表示了只要第二个参数设置为true,就会删除指定的目录,并删除该目录中的所有子目录和文件,但实际上在某些情况下达不到此要求。需要使用遍历,删除子文件,然后再删除该文件夹。
因为这个删除功能是在调用的一个webservice服务,这个webservice服务是另一家公司编写的,无法更改,而且此webservice服务在服务器上运行正常,从未出现此类错误。这种猜测是有疑问的。
另一种说法,说在svn版本控制的文件夹下运行有可能导致此类错误。我在本地部署的此服务文件夹,的确是在svn的版本控制之下,于是我为了验证。把此webservice服务挪到了svn版本控制的文件夹之外,但仍然报此错误。难道我真要向服务提供商反馈此问题,或者用反编译软件更改删除方法吗?很犹豫,因为这两种方法都很麻烦,第一种向服务商反馈,人家未必会改。第二种,更改相应dll文件,也麻烦,每次服务商升级此服务都要重新修改编译此dll。
在犹豫的过程中,因为copy到svn版本控制外的文件夹没起到相应作用,所以我要删除,删除过程中报了这样的错误:另一个进程正在使用该文件,不能删除。突然想到,使用了qsync文件夹同步软件,会不会是这个影响到了。于是我把此webservice服务的文件夹移到qsync软件控制的文件夹之外再次测试。这次用相应的删除接口顺利的删除掉了相应的文件夹。估计svn版本控制影响文件夹的删除也是这个原因。现在再翻阅文件夹Directory.Delete(路径,true)删除导致出错的情况:
IOException
存在具有相同名称和 path 指定的位置的文件。
- 或 - path 指定的目录为只读,或者 recursive 的值为 false,且 path 不是空目录。
- 或 - 该目录是应用程序的当前工作目录。
- 或 - 该目录包含一个只读文件。
- 或 - 另一个进程正在使用该目录。
UnauthorizedAccessException
调用方没有所要求的权限。
ArgumentException
path 为长度为零的字符串,仅包含空格,或包含一个或多个无效字符。 你可以使用 GetInvalidPathChars() 方法查询无效字符。
ArgumentNullException
path 为 null。
PathTooLongException
指定的路径和/或文件名超过了系统定义的最大长度。
DirectoryNotFoundException
不存在或找不到 path。
- 或 - 指定的路径无效(例如,它位于未映射的驱动器上)。

符合另一个进程正在使用该目录,导致删除出错这种情况。至此问题解决,也找到了此问题出现的真正原因

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值