应先用Directory.GetFiles精准匹配再逐个删除避免Directory.Delete误删或报错需处理权限、占用、只读等异常并注意中文路径、ACL跳过、句柄未释放等问题。用 Directory.GetFiles 精准匹配再删别直接 Directory.Delete批量删指定格式文件核心是「先找对再动手」。很多人图省事用 Directory.Delete(path, true) 整目录清空结果误删非目标文件或因权限/占用报错中断。真正安全的做法是先枚举、过滤、再逐个删除。常见错误现象UnauthorizedAccessException权限不足、IOException文件正被占用、删了不该删的配置文件或子目录。Directory.GetFiles 支持通配符比如 *.log、temp_*.tmp但不递归——要遍历子目录得加 SearchOption.AllDirectories如果路径含中文或特殊字符确保传入的是完整、已转义的 string不要拼接未清理的用户输入删除前建议用 File.GetAttributes 检查是否为只读否则 File.Delete 会静默失败.NET 6 会抛异常旧版本可能跳过递归删 .tmp 文件时为什么 SearchOption.AllDirectories 有时漏掉某些子目录不是 API 有 bug而是权限或访问控制列表ACL导致跳过。.NET 在遍历时遇到无权访问的子目录默认静默跳过不抛异常也不计入结果。使用场景清理临时文件夹如 %TEMP%里面常混着系统或其它进程创建的受限子目录。必须手动捕获 UnauthorizedAccessException 和 DirectoryNotFoundException并在 try/catch 中继续遍历兄弟目录避免用 Directory.EnumerateFiles 直接链式调用再删——它底层仍走同样路径异常处理逻辑没变若需强一致性可先用 Directory.GetDirectories 获取所有子路径再逐个 try/catch 调用 GetFilesFile.Delete 报 IOException: The process cannot access the file 怎么办文件正被另一个线程、进程或 .NET 自身的 FileStream 持有句柄这是最常见原因。不是代码写错了而是资源没释放干净。 arXiv Xplorer ArXiv 语义搜索引擎帮您快速轻松的查找保存和下载arXiv文章。