C#获取文件夹下所有文件名

01 String path = @"X:\xxx\xxx";

02 //第一种方法

03 var files = Directory.GetFiles(path, "*.txt");

04

05 foreach (var file in files)

06 Console.WriteLine(file);

07

08 //第二种方法

09 DirectoryInfo folder = new DirectoryInfo(path);

10

11 foreach (FileInfo file in folder.GetFiles("*.txt"))

12 {

13 Console.WriteLine(file.FullName);

14 }

<think>好的,用户现在问的是如何在C#获取文件夹下所有子文件夹名以及每个子文件夹下的所有文件名。这个问题看起来是文件操作的常见需求,用户可能是在做文件管理相关的开发,比如备份工具、文件浏览器或者需要批量处理文件的应用。 首先,我需要确认用户的需求是获取文件夹结构的信息,可能需要递归遍历所有子目录。用户可能希望得到一个层次化的结构,每个文件夹对应其下的文件列表。这时候需要考虑使用System.IO命名空间里的类,比如Directory和DirectoryInfo。 接下来,我需要回忆C#中处理目录和文件的方法。获取所有子文件夹可以用Directory.GetDirectories方法,而获取文件夹下的所有文件可以用Directory.GetFiles。但用户可能需要的是每个子文件夹下的所有文件,所以可能需要遍历每个子文件夹,然后获取其中的文件。 另外,用户可能对性能有要求,特别是当目录结构很大时。这时候需要考虑使用Enumerate方法,比如Directory.EnumerateDirectories和Directory.EnumerateFiles,因为它们可以延迟加载,减少内存占用。 还要考虑异常处理,比如路径不存在或者没有访问权限的情况。但用户的问题中没有提到异常处理,可能只需要基本的实现方法,暂时可以忽略这部分,但在回答中可以提一下需要注意的地方。 用户可能希望看到两种实现方式:一种是使用简单的数组获取,另一种是使用迭代器以提高效率。同时,示例代码的结构应该清晰,展示如何遍历每个子文件夹,并获取其中的文件列表。 需要提醒用户关于权限和路径有效性的问题,确保他们在实际使用时添加必要的错误处理。此外,可能需要解释一下返回的结果结构,比如使用字典来存储文件夹名和对应的文件列表。 最后,确认是否需要递归获取所有嵌套子文件夹,或者只是直接子文件夹。根据问题描述,用户可能只需要直接子文件夹下的文件,但如果有递归需求,可能需要调整代码,使用递归方法或者搜索选项。不过问题中没有明确说明,所以先按直接子文件夹处理,可以在回答中提及如果需要递归的话应该如何修改,比如添加SearchOption.AllDirectories参数。</think>在C#获取文件夹层级结构可通过`System.IO`命名空间实现,以下是两种常用实现方式: --- ### 方法一:使用`Directory`类(简单直接) ```csharp using System.IO; // 获取目标文件夹路径(示例路径) string rootPath = @"C:\MyFolder"; // 获取所有子文件夹名称 string[] subDirectories = Directory.GetDirectories(rootPath); // 创建字典存储[文件夹名:文件列表] Dictionary<string, List<string>> directoryStructure = new(); foreach (string dirPath in subDirectories) { // 提取纯文件夹名 string dirName = Path.GetFileName(dirPath); // 获取文件夹下所有文件名 string[] files = Directory.GetFiles(dirPath); List<string> fileNames = files.Select(Path.GetFileName).ToList(); directoryStructure.Add(dirName, fileNames); } ``` --- ### 方法二:使用`DirectoryInfo`类(面向对象) ```csharp using System.IO; DirectoryInfo rootDir = new DirectoryInfo(@"C:\MyFolder"); // 获取所有子目录信息 DirectoryInfo[] subDirs = rootDir.GetDirectories(); var structure = subDirs.ToDictionary( dir => dir.Name, // 键:文件夹名 dir => dir.GetFiles().Select(f => f.Name).ToList() // 值:文件名列表 ); ``` --- ### 扩展功能建议 1. **递归遍历**:添加`SearchOption.AllDirectories`参数可获取嵌套文件夹 ```csharp // 获取所有层级的子目录 string[] allSubDirs = Directory.GetDirectories(rootPath, "*", SearchOption.AllDirectories); ``` 2. **过滤文件类型**:通过通配符限定文件类型 ```csharp // 仅获取.jpg文件 string[] jpgFiles = Directory.GetFiles(dirPath, "*.jpg"); ``` 3. **性能优化**:使用`Enumerate`系列方法实现延迟加载(适用于大目录) ```csharp foreach (string dirPath in Directory.EnumerateDirectories(rootPath)) { var files = Directory.EnumerateFiles(dirPath); // 处理逻辑... } ``` --- ### 注意事项 - 路径有效性验证:建议先使用`Directory.Exists(path)`检查目录是否存在 - 权限问题:若访问系统目录需处理`UnauthorizedAccessException` - 路径格式:推荐使用`Path.Combine()`构建跨平台兼容路径 实际应用中可根据需求选择`Directory`或`DirectoryInfo`,前者返回字符串路径,后者提供更丰富的文件属性信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值