0

0

C#删除文件夹操作 C#如何删除一个目录及其内容

煙雲

煙雲

发布时间:2026-02-07 09:49:02

|

441人浏览过

|

来源于php中文网

原创

会,Directory.Delete 默认只删空目录,遇非空目录抛 IOException;需传 true 启用递归删除,但只读文件仍会导致失败,建议先重置属性再删除。

c#删除文件夹操作 c#如何删除一个目录及其内容

Directory.Delete 会报“目录非空”错误吗?

会,而且很常见。Directory.Delete(path) 默认只删空目录,遇到里面有文件或子目录时直接抛 IOException,错误信息通常是“目录不是空的”。这不是 bug,是设计如此——.NET 故意把“强制递归删除”设为显式选项,避免误删。

正确做法是传入第二个参数 true

Directory.Delete(@"C:\Temp\MyFolder", true); // true 表示递归删除

注意:true 不代表“跳过权限检查”或“忽略只读文件”,它只是开启递归遍历并逐个删除。如果目录下有只读文件,仍会失败。

删除前要不要手动遍历清理只读/隐藏文件?

要,尤其在 Windows 上。NTFS 文件常带 ReadOnlyHidden 属性,Directory.Delete(path, true) 遇到这类文件会直接中断,不继续删后续内容。

稳妥做法是先重置属性再删:

  • Directory.GetFiles(path, "*", SearchOption.AllDirectories) 获取所有文件路径
  • 对每个 FileInfo 调用 file.Attributes = FileAttributes.Normal;
  • 再调用 Directory.Delete(path, true)

或者更省事:用 Directory.GetFileSystemEntries + 递归遍历 + 属性重置 + File.Delete/Directory.Delete 手动清理——虽然代码多几行,但可控性强,能捕获具体哪个文件导致失败。

Directory.Delete 和 Process.Start("cmd", "/c rd /s /q ...") 哪个更可靠?

前者更可靠。Process.Start 调 cmd 是绕路,引入额外风险:命令注入、路径含空格或特殊字符时需手动转义、依赖系统 cmd 可用、无统一异常类型(可能静默失败)。

小K直播姬
小K直播姬

全球首款AI视频动捕虚拟直播产品

下载

Directory.Delete(path, true) 是 .NET 原生 API,路径自动处理 Unicode 和长路径(只要启用了 long path 支持),异常明确(UnauthorizedAccessExceptionIOException),也更容易写单元测试。

唯一例外:极老版本 .NET Framework(如 2.0)对某些符号链接或挂载点支持不全,此时 cmd 的 rd /s /q 可能更“暴力”,但现代项目基本不用考虑。

异步删除目录可行吗?

没有原生异步 API。.NET 直到 6.0 仍没提供 Directory.DeleteAsync。强行用 Task.Run(() => Directory.Delete(...)) 只是线程池搬运工,并不真正异步,还浪费线程资源。

如果主线程不能阻塞(比如 WinForms/WPF UI 线程),只能:

  • Task.Run 包一层,但必须配好取消逻辑和异常转发
  • 改用 FileSystemWatcher + 分批删除(适合超大目录,避免长时间卡死)
  • 接受同步阻塞,加 UI 提示(多数场景下用户感知不强)

别被“async”诱惑——文件系统操作本质是同步 I/O,硬套 async 模式反而掩盖真实瓶颈。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

612

2023.08.10

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

612

2023.08.10

数据库Delete用法
数据库Delete用法

数据库Delete用法:1、删除单条记录;2、删除多条记录;3、删除所有记录;4、删除特定条件的记录。更多关于数据库Delete的内容,大家可以访问下面的文章。

281

2023.11.13

drop和delete的区别
drop和delete的区别

drop和delete的区别:1、功能与用途;2、操作对象;3、可逆性;4、空间释放;5、执行速度与效率;6、与其他命令的交互;7、影响的持久性;8、语法和执行;9、触发器与约束;10、事务处理。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

216

2023.12.29

windows查看端口占用情况
windows查看端口占用情况

Windows端口可以认为是计算机与外界通讯交流的出入口。逻辑意义上的端口一般是指TCP/IP协议中的端口,端口号的范围从0到65535,比如用于浏览网页服务的80端口,用于FTP服务的21端口等等。怎么查看windows端口占用情况呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

954

2023.07.26

查看端口占用情况windows
查看端口占用情况windows

端口占用是指与端口关联的软件占用端口而使得其他应用程序无法使用这些端口,端口占用问题是计算机系统编程领域的一个常见问题,端口占用的根本原因可能是操作系统的一些错误,服务器也可能会出现端口占用问题。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

1138

2023.07.27

windows照片无法显示
windows照片无法显示

当我们尝试打开一张图片时,可能会出现一个错误提示,提示说"Windows照片查看器无法显示此图片,因为计算机上的可用内存不足",本专题为大家提供windows照片无法显示相关的文章,帮助大家解决该问题。

814

2023.08.01

windows查看端口被占用的情况
windows查看端口被占用的情况

windows查看端口被占用的情况的方法:1、使用Windows自带的资源监视器;2、使用命令提示符查看端口信息;3、使用任务管理器查看占用端口的进程。本专题为大家提供windows查看端口被占用的情况的相关的文章、下载、课程内容,供大家免费下载体验。

457

2023.08.02

Golang处理数据库错误教程合集
Golang处理数据库错误教程合集

本专题整合了Golang数据库错误处理方法、技巧、管理策略相关内容,阅读专题下面的文章了解更多详细内容。

2

2026.02.06

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 8.6万人学习

Excel 教程
Excel 教程

共162课时 | 15.9万人学习

PHP基础入门课程
PHP基础入门课程

共33课时 | 2.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号