You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何捕获Directory.Delete删除锁定/占用文件/文件夹时的异常?

解决方案:更简便的捕获Directory.Delete异常的方法

首先纠正你原代码里的一个逻辑错误:你要删除修改时间早于目标时间的文件夹,但原代码里的判断条件是modification >= targetTime,这等于在尝试删除新文件夹,完全搞反了,这可能是你遇到问题的原因之一。

针对捕获锁定文件/文件夹的异常,只需要扩展catch块的异常类型,同时修正删除逻辑即可,比你遍历所有文件的方法简洁得多:

DateTime now = DateTime.Now;
TimeSpan twelveHoursAgo = new TimeSpan(-12, 0, 0);
DateTime targetTime = now.Add(twelveHoursAgo);

string[] dirs = Directory.GetDirectories(tempPath, "*", SearchOption.TopDirectoryOnly);

foreach (string dir in dirs)
{
    DateTime modification = Directory.GetLastWriteTime(dir);
    // 修正逻辑:只删除早于12小时前的文件夹
    if (modification < targetTime)
    {
        try
        {
            Directory.Delete(dir, true);
        }
        catch (IOException)
        {
            // 捕获文件/文件夹被占用、正在使用的异常,可按需记录日志或跳过
        }
        catch (UnauthorizedAccessException)
        {
            // 捕获权限不足的异常,同样可按需处理
        }
        // 可根据实际情况添加其他可能的异常类型,比如DirectoryNotFoundException等
    }
}

为什么原代码无法捕获异常?

你原代码的catch只捕获了IOException,但Directory.Delete可能抛出其他类型的异常(比如权限不足的UnauthorizedAccessException),这些未被捕获的异常会导致程序崩溃。同时删除逻辑的错误,可能让你误删了包含锁定文件的新文件夹,进一步触发未处理的异常。

这个方法的优势

不需要提前遍历文件夹里的所有文件去检查是否有新文件,而是直接尝试删除符合时间条件的文件夹,遇到异常就跳过或处理——这种“尝试操作再处理异常”的方式更简洁,也符合.NET文件操作的惯用思路。

内容的提问来源于stack exchange,提问作者Mr. Coz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 19:22:17