如何使用.NET Core读取目录中的所有文件?(附单文件读取代码示例)
在.NET Core中读取目录下所有文件的实现方法
嘿,你已经有了读取单个文件内容的代码,要在.NET Core里读取目录下所有文件其实挺简单的!.NET Core的System.IO命名空间里有现成的工具类,能轻松搞定这个需求,我给你几种常见的实现方式,你可以根据自己的场景选:
1. 获取目录下所有文件(不含子目录)
用Directory.GetFiles()方法就能直接拿到目录里所有文件的路径数组,然后遍历每个路径读取内容就行,结合你原来的读取逻辑改造一下:
using System; using System.IO; class Program { static void Main() { // 替换成你要读取的目录路径 string targetDirectory = @"C:\path\to\your\directory"; try { // 获取目录下所有文件的完整路径 string[] filePaths = Directory.GetFiles(targetDirectory); foreach (string filePath in filePaths) { Console.WriteLine($"正在读取文件: {filePath}"); using (StreamReader sr = new StreamReader(filePath)) { string content = sr.ReadToEnd(); Console.WriteLine(content); Console.WriteLine("--------------------------"); // 用分隔线区分不同文件内容 } } } catch (IOException e) { Console.WriteLine("读取过程中出现IO错误:"); Console.WriteLine(e.Message); } catch (UnauthorizedAccessException e) { Console.WriteLine("没有权限访问该目录或文件:"); Console.WriteLine(e.Message); } } }
2. 递归读取目录及所有子目录下的文件
如果需要连子目录里的文件一起读取,只需要给GetFiles()多加一个SearchOption.AllDirectories参数就行:
// 替换原来的GetFiles调用,这样就能拿到所有层级的文件 string[] filePaths = Directory.GetFiles(targetDirectory, "*.*", SearchOption.AllDirectories);
3. 过滤特定扩展名的文件
比如你只想读取.txt格式的文件,可以通过通配符过滤:
// 只读取当前目录下的txt文件 string[] txtFilePaths = Directory.GetFiles(targetDirectory, "*.txt"); // 读取当前目录+所有子目录下的txt文件 string[] txtFilePaths = Directory.GetFiles(targetDirectory, "*.txt", SearchOption.AllDirectories);
4. 面向对象风格的实现(用DirectoryInfo)
如果你更习惯面向对象的写法,也可以用DirectoryInfo类来操作:
using System; using System.IO; class Program { static void Main() { string targetDirectory = @"C:\path\to\your\directory"; DirectoryInfo dirInfo = new DirectoryInfo(targetDirectory); try { // 获取当前目录下的所有文件(不含子目录) FileInfo[] files = dirInfo.GetFiles(); // 如果要包含子目录,改成: // FileInfo[] files = dirInfo.GetFiles("*.*", SearchOption.AllDirectories); foreach (FileInfo file in files) { Console.WriteLine($"正在读取文件: {file.FullName}"); using (StreamReader sr = file.OpenText()) { string content = sr.ReadToEnd(); Console.WriteLine(content); Console.WriteLine("--------------------------"); } } } catch (IOException e) { Console.WriteLine("读取过程中出现IO错误:"); Console.WriteLine(e.Message); } catch (UnauthorizedAccessException e) { Console.WriteLine("没有权限访问该目录或文件:"); Console.WriteLine(e.Message); } } }
额外小提示
- 记得处理
UnauthorizedAccessException这类权限异常,毕竟有些系统目录或者受保护的文件可能不让你访问 - 如果你的目标目录特别大,用
Directory.EnumerateFiles()会比GetFiles()更省内存——它是延迟加载文件路径的,不会一次性把所有路径都加载到内存里:foreach (string filePath in Directory.EnumerateFiles(targetDirectory, "*.*", SearchOption.AllDirectories)) { // 逐个处理文件即可 }
内容的提问来源于stack exchange,提问作者crayden
相关产品推荐
相关产品推荐

