当前位置: 首页 > news >正文

C#删除文件夹里的所有文件的实现方案

一、 基础方案删除文件夹内所有文件保留子文件夹适用于仅删除目标文件夹下直接存放的文件不删除子文件夹及其内部文件的场景核心使用System.IO命名空间的 API。核心 API 说明Directory.GetFiles(string path)获取指定文件夹下所有直接文件的完整路径返回string[]数组。File.Delete(string filePath)删除单个指定文件需处理文件占用等异常。实现代码12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061usingSystem;usingSystem.IO;namespaceDeleteFolderFiles{classBasicDelete{/// summary/// 删除指定文件夹内所有直接文件保留子文件夹/// /summary/// param namefolderPath目标文件夹路径/parampublicstaticvoidDeleteAllFilesInFolder(stringfolderPath){// 1. 验证文件夹是否存在避免路径错误if(!Directory.Exists(folderPath)){Console.WriteLine($错误文件夹 {folderPath} 不存在);return;}try{// 2. 获取文件夹内所有直接文件的路径string[] allFiles Directory.GetFiles(folderPath);// 3. 遍历并删除每个文件foreach(stringfilePathinallFiles){// 确保文件存在避免并发场景下文件已被删除if(File.Exists(filePath)){File.Delete(filePath);Console.WriteLine($成功删除文件{filePath});}}Console.WriteLine(所有文件删除完成);}catch(UnauthorizedAccessException ex){Console.WriteLine($错误没有权限删除文件 - {ex.Message});}catch(IOException ex){Console.WriteLine($错误文件被占用或无法删除 - {ex.Message});}catch(Exception ex){Console.WriteLine($未知错误{ex.Message});}}// 调用示例staticvoidMain(string[] args){// 目标文件夹路径可改为绝对路径如 D:\TestFolderstringtargetFolder TestFolder;DeleteAllFilesInFolder(targetFolder);}}}二、 进阶方案 1删除文件夹内所有文件包含子文件夹文件适用于需要递归删除目标文件夹下所有文件含子文件夹内文件仅保留文件夹结构不删除任何文件夹的场景。核心 API 说明Directory.GetFiles(string path, string searchPattern, SearchOption searchOption)searchPattern文件筛选模式*.*匹配所有文件。SearchOption.AllDirectories递归搜索所有子目录TopDirectoryOnly仅搜索当前目录对应基础方案。实现代码12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364usingSystem;usingSystem.IO;namespaceDeleteFolderFiles{classRecursiveDeleteFiles{/// summary/// 递归删除文件夹内所有文件包含子文件夹文件保留文件夹结构/// /summary/// param namefolderPath目标文件夹路径/parampublicstaticvoidDeleteAllFilesRecursively(stringfolderPath){if(!Directory.Exists(folderPath)){Console.WriteLine($错误文件夹 {folderPath} 不存在);return;}try{// 递归获取所有文件当前目录所有子目录string[] allFiles Directory.GetFiles(folderPath,*.*,SearchOption.AllDirectories);// 批量删除foreach(stringfilePathinallFiles){if(File.Exists(filePath)){// 可选设置文件为正常属性避免只读文件无法删除File.SetAttributes(filePath, FileAttributes.Normal);File.Delete(filePath);Console.WriteLine($成功删除文件{filePath});}}Console.WriteLine(所有文件含子文件夹文件删除完成);}catch(UnauthorizedAccessException ex){Console.WriteLine($权限错误{ex.Message});}catch(IOException ex){Console.WriteLine($文件占用错误{ex.Message});}catch(Exception ex){Console.WriteLine($未知错误{ex.Message});}}// 调用示例staticvoidMain(string[] args){stringtargetFolder D:\TestFolder;DeleteAllFilesRecursively(targetFolder);}}}三、 进阶方案 2删除文件夹含所有文件 子文件夹 重建空文件夹适用于需要彻底清空文件夹删除所有文件和子文件夹最终保留一个空的目标文件夹的场景比递归删除文件更高效。核心 API 说明Directory.Delete(string path, bool recursive)recursive: true递归删除目标文件夹及其所有子文件夹、文件。recursive: false仅删除空的目标文件夹。Directory.CreateDirectory(string path)创建文件夹若文件夹已存在不会抛出异常直接返回现有文件夹信息。实现代码123456789101112131415161718192021222324252627282930313233343536373839404142434445464748usingSystem;usingSystem.IO;namespaceDeleteFolderFiles{classDeleteAndRecreateFolder{/// summary/// 彻底清空文件夹删除文件子文件夹重建空文件夹/// /summary/// param namefolderPath目标文件夹路径/parampublicstaticvoidClearFolderCompletely(stringfolderPath){try{// 1. 若文件夹存在递归删除含所有文件和子文件夹if(Directory.Exists(folderPath)){Directory.Delete(folderPath,true);Console.WriteLine($已删除文件夹{folderPath});}// 2. 重建空文件夹Directory.CreateDirectory(folderPath);Console.WriteLine($已重建空文件夹{folderPath});}catch(UnauthorizedAccessException ex){Console.WriteLine($权限错误无法删除/创建文件夹 - {ex.Message});}catch(IOException ex){Console.WriteLine($IO错误文件夹被占用 - {ex.Message});}catch(Exception ex){Console.WriteLine($未知错误{ex.Message});}}// 调用示例staticvoidMain(string[] args){stringtargetFolder D:\TestFolder;ClearFolderCompletely(targetFolder);}}}四、 关键注意事项避坑指南路径格式C# 中文件夹路径推荐使用Verbatim 字符串如D:\TestFolder避免转义字符\冲突。支持相对路径如TestFolder和绝对路径如D:\TestFolder相对路径对应程序运行目录。异常处理必须捕获UnauthorizedAccessException权限不足和IOException文件 / 文件夹被占用、只读文件等。避免因单个文件删除失败导致整个批量操作中断可在循环内添加try-catch单独处理单个文件。只读文件处理若文件为「只读属性」直接调用File.Delete会抛出异常需先通过File.SetAttributes(filePath, FileAttributes.Normal)重置文件属性。并发安全若存在多线程 / 多进程操作同一文件夹需先通过File.Exists(filePath)验证文件是否存在避免删除已被其他进程删除的文件。谨慎操作删除操作不可逆建议在正式删除前添加日志输出或备份逻辑避免误删重要文件。切勿操作系统关键文件夹如C:\Windows可能导致系统异常。总结仅删当前文件夹文件保留子文件夹使用Directory.GetFiles(folderPath) 遍历File.Delete。删所有文件含子文件夹文件保留文件夹结构使用Directory.GetFiles(..., SearchOption.AllDirectories) 递归删除。彻底清空文件夹重建空文件夹使用Directory.Delete(folderPath, true)Directory.CreateDirectory(folderPath)效率最高。安全要点添加异常处理、验证路径存在、处理只读文件、避免误删系统文件。
http://www.zskr.cn/news/1364901.html

相关文章:

  • 使用C#实现隐藏Excel单个和多个工作表的示例详解
  • 食品安全总监考试报名方式有哪些,考试难度如何,难度变化大吗 - myqiye
  • KOSS模型:卡尔曼滤波与深度学习的融合创新
  • 实战:用密度峰值聚类(DPC)算法处理你的第一份复杂形状数据集(附完整Python代码与可视化)
  • 为什么 Multi-Agent 一定要测“失败率”而不是“成功率”
  • 从One-Hot到BERT:用Python代码复现NLP词向量演进的5个关键阶段
  • 告别Kali?Parrot安全系统实战初体验与渗透测试工作流迁移指南
  • 小红书视频下载神器:3分钟掌握无水印批量下载技巧
  • 小红书下载器突破反爬:7个User-Agent伪装技巧与实战指南
  • 能源AI Agent不是“加个模型”:20年工控系统老兵手绘7层可信执行栈,含硬件级TEE加固方案
  • 告别‘软件荒’?实测openKylin应用商店与安卓App兼容,看国产系统生态现状
  • 推荐靠谱的火锅串串培训机构,想做川味火锅串串的看过来 - mypinpai
  • 如何用Zotero-GPT插件实现AI驱动的智能文献管理:终极指南
  • JMeter压测5大底层优化:线程模型、HTTP连接、Groovy脚本、JVM参数与分布式协同
  • JMeter梯度压测:精准定位系统可扩展性边界
  • XHS-Downloader:小红书内容采集与管理的技术实践
  • CentOS 7上安装Containerd:YUM和二进制包两种方法,到底哪个更适合你?
  • 机器学习预测因果边界:从数据稀缺子群体到精准决策
  • 水草治理公司口碑如何?荷之源口碑出众 - mypinpai
  • Keras图像分类混淆矩阵实战:从原理到调优的完整指南
  • Unity触摸交互优化:TouchScript跨平台手势架构解析
  • 汽车玻璃贴膜哪个好,揭秘高性价比汽车贴膜品牌及价格 - mypinpai
  • 浏览器变身微信客户端:wechat-need-web插件颠覆你的聊天体验
  • 3分钟解锁网易云音乐加密文件:NCMDump黑科技全攻略
  • C# Task异步编程的实现示例
  • 阴阳师自动化脚本:如何用智能技术解放你的游戏时间
  • 终极指南:快速重置JetBrains IDE试用期的完整方案
  • CVE-2016-2183漏洞深度解析:Sweet32攻击与3DES禁用实战
  • 猫抓浏览器扩展:3步轻松捕获网页视频资源,让在线内容触手可及
  • 基于神经网络的DDoS攻击检测:从特征工程到实战部署