讲师中心 微信公众号
AI工具推荐 视频效率加速

C#遍历文件夹中所有文件 C#如何列出目录下的文件

星宇同学_6481

星宇同学_6481

发布时间:2026-02-06 08:27:22

|

921人浏览过

|

来源于php中文网

原创

最推荐使用 Directory.EnumerateFiles 处理大目录或需逐个处理的场景,它返回 IEnumerable<string>,内存占用低、默认跳过无权限子目录;Directory.GetFiles 适合小目录且需一次性获取全部路径,但易内存暴涨且不支持动态筛选。

c#遍历文件夹中所有文件 c#如何列出目录下的文件

Directory.GetFiles 一次性获取所有文件路径

最直接的方式是用 Directory.GetFiles,它返回 string[],包含匹配条件的完整文件路径。默认不递归,只查当前目录:

string[] files = Directory.GetFiles(@"C:\MyFolder");

加第三个参数可递归搜索:SearchOption.AllDirectories;用第二个参数可过滤扩展名,比如 "*.txt"。

  • 注意:如果目录不存在或无权限,会直接抛 DirectoryNotFoundException 或 UnauthorizedAccessException,不能靠返回空数组判断失败
  • 大目录下容易内存暴涨——所有路径一次性加载进内存,不用 foreach 遍历时也已分配完毕
  • 不支持按修改时间、大小等动态条件筛选,纯字符串匹配

Directory.EnumerateFiles 更适合逐个处理大目录

当文件数多、或只需遍历处理(如日志扫描、批量重命名),优先选 Directory.EnumerateFiles。它返回 IEnumerable<string></string>,边枚举边 yield,内存占用低:

Web Accessibility (WCAG 2 AA))
Web Accessibility (WCAG 2 AA))

将 WCAG 2 AA 无障碍标准应用于设计系统、UI 组件和网页——通过可运行的验证器进行对比度计算,采用设计 token 模式使颜色天生可访问,设定排版和焦点状态规则,并提供语义检查清单。适用于构建或审查 UI。

下载
foreach (string file in Directory.EnumerateFiles(@"C:\Logs", "*.log", SearchOption.AllDirectories))
{
    Console.WriteLine(file);
    // 处理单个文件,不会提前加载全部路径
}
  • 遇到权限不足的子目录时,默认跳过(不抛异常),但可通过 try/catch 捕获 UnauthorizedAccessException 并继续
  • 不支持通配符组合(如 "a*.log|b*.txt"),一次只能传一个模式
  • 返回路径格式依赖输入路径写法:若输入相对路径,结果也是相对路径;建议统一用绝对路径避免歧义

用 DirectoryInfo + GetFiles 需要手动处理递归和异常

DirectoryInfo 提供面向对象接口,GetFiles() 方法行为类似 Directory.GetFiles,但允许复用实例、检查属性(如 Parent、Exists):

var dir = new DirectoryInfo(@"C:\Data");
if (!dir.Exists) return;
FileInfo[] files = dir.GetFiles("*.config");
  • 递归需手动实现:调用 GetDirectories() 后逐层 GetFiles(),比 SearchOption.AllDirectories 冗长且易漏异常处理
  • 每个 FileInfo 实例带文件元数据(LastWriteTime、Length 等),适合需要属性再过滤的场景,但创建开销比纯路径字符串大
  • 对符号链接(symlink)或挂载点行为不透明,Windows 上可能意外跳入其他卷,需额外校验 FullName.StartsWith(dir.FullName)

跨平台注意:.NET Core/.NET 5+ 的路径分隔符与大小写敏感性

在 Linux/macOS 上,Directory.GetFiles 和 EnumerateFiles 默认区分大小写,且只认正斜杠 / 或系统原生分隔符(Path.DirectorySeparatorChar)。硬写反斜杠 \ 在非 Windows 平台可能静默失败或返回空:

  • 始终用 Path.Combine("folder", "sub") 拼路径,别手拼字符串
  • 过滤时若需忽略大小写,得自己用 StringComparer.OrdinalIgnoreCase 做二次筛选,API 不提供该选项
  • Docker 容器内挂载 Windows 主机目录时,路径大小写行为取决于挂载方式(如 case-sensitive: false),实测可能和本地 Linux 表现不一致
实际项目里,多数情况直接用 Directory.EnumerateFiles 加 try/catch 处理权限异常就够了。真要按时间范围筛选,别硬塞在枚举里,先取路径再用 FileInfo 读属性——顺序错了,性能就崩了。

热门AI工具

更多
WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

6539

2023.08.02

php中foreach用法
php中foreach用法

本专题整合了php中foreach用法的相关介绍,阅读专题下面的文章了解更多详细教程。

778

2025.12.04

go语言 面向对象
go语言 面向对象

本专题整合了go语言面向对象相关内容,阅读专题下面的文章了解更多详细内容。

6675

2025.09.05

java面向对象
java面向对象

本专题整合了java面向对象相关内容,阅读专题下面的文章了解更多详细内容。

342

2025.11.27

C++ 面向对象编程与设计模式实践
C++ 面向对象编程与设计模式实践

本专题整合了 C++ 面向对象编程的核心机制,涵盖类的定义与访问控制、构造函数与析构函数、拷贝语义与移动语义、继承与虚函数多态、抽象类与接口、运算符重载、友元函数等关键知识点,同时结合单例模式、工厂模式、观察者模式、策略模式等常用设计模式的 C++ 实现,帮助开发者写出结构清晰、易于维护的面向对象代码。

344

2026.04.09

Java 面向对象与核心编程机制
Java 面向对象与核心编程机制

系统讲解 Java 面向对象编程的核心知识体系,涵盖类的定义与封装、构造方法与 this/super 关键字、继承与方法重写、多态与向上向下转型、抽象类与接口的区别与设计原则、异常处理机制(try-catch-finally / 自定义异常)、泛型的类型参数与通配符、集合框架(List/Set/Map)的使用与遍历方式,帮助开发者全面掌握 Java 程序设计的核心机制与面向对象思维。

223

2026.04.17

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

1778

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

2764

2023.09.04

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

0

2026.10.22

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习

Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习

Valgrind支持平台说明
Valgrind支持平台说明

共0课时 | 0人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn