You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:52:14