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

C#如何读取文件夹下所有CSV文件?新手开发者求助

嘿,刚入门编程能写出单个CSV文件读取的代码已经很不错啦!要实现读取文件夹里所有CSV文件其实很简单,我来帮你调整代码,顺便给你解释每一步的逻辑:

首先,你的现有代码是硬编码了单个文件路径,我们需要改成遍历指定文件夹下所有.csv后缀的文件,然后逐个调用你的GetDataTabletFromCSVFile方法处理。

修改后的完整代码

using System;
using System.Data;
using System.IO;

class Program 
{
    static void Main(string[] args) 
    {
        // 替换成你要读取的文件夹路径
        string csvFolderPath = @"C:\Sample files";
        
        // 先检查文件夹是否存在,避免路径错误导致崩溃
        if (!Directory.Exists(csvFolderPath))
        {
            Console.WriteLine("哎呀,指定的文件夹不存在哦,请检查路径是否正确!");
            return;
        }
        
        // 获取文件夹下所有.csv文件:
        // 第三个参数用SearchOption.TopDirectoryOnly只读取当前文件夹;如果要包含子文件夹,换成SearchOption.AllDirectories
        string[] allCsvFiles = Directory.GetFiles(csvFolderPath, "*.csv", SearchOption.TopDirectoryOnly);
        
        if (allCsvFiles.Length == 0)
        {
            Console.WriteLine("文件夹里没找到任何.csv文件呢!");
            return;
        }
        
        // 遍历每个CSV文件,逐个处理
        foreach (string csvFilePath in allCsvFiles)
        {
            Console.WriteLine($"开始处理文件:{csvFilePath}");
            try
            {
                DataTable csvData = GetDataTabletFromCSVFile(csvFilePath);
                // 这里可以添加你自己的处理逻辑,比如打印数据行数、写入数据库等
                Console.WriteLine($"处理完成!这个文件一共有 {csvData.Rows.Count} 行数据");
            }
            catch (Exception ex)
            {
                // 单个文件出错不影响其他文件处理,友好提示错误信息
                Console.WriteLine($"处理文件 {csvFilePath} 时遇到问题:{ex.Message}");
            }
        }
        
        Console.WriteLine("所有CSV文件都处理完啦!");
    }
    
    // 假设你已经实现了这个读取单个CSV的方法(如果还没完善,下面有个简单示例)
    private static DataTable GetDataTabletFromCSVFile(string csv_file_path)
    {
        DataTable dt = new DataTable();
        // 这里是基础的CSV读取逻辑,注意:如果你的CSV字段里包含逗号或引号,这个简单逻辑会出错
        // 进阶的话可以用CsvHelper这类第三方库来处理复杂CSV格式
        using (var reader = new StreamReader(csv_file_path))
        {
            // 读取表头
            string headerLine = reader.ReadLine();
            if (!string.IsNullOrEmpty(headerLine))
            {
                foreach (string columnName in headerLine.Split(','))
                {
                    dt.Columns.Add(columnName.Trim());
                }
                // 读取每行数据
                while (!reader.EndOfStream)
                {
                    string dataLine = reader.ReadLine();
                    if (!string.IsNullOrEmpty(dataLine))
                    {
                        dt.Rows.Add(dataLine.Split(','));
                    }
                }
            }
        }
        return dt;
    }
}

关键步骤解释

  • 指定文件夹路径:把原来的单个文件路径换成文件夹路径,先做存在性检查,避免程序崩溃
  • 获取所有CSV文件:用Directory.GetFiles方法,第二个参数"*.csv"是筛选后缀为.csv的文件,第三个参数控制是否读取子文件夹
  • 遍历处理每个文件:用foreach循环逐个读取,加上try-catch保证单个文件出错不会中断整个程序
  • 处理CSV的小提醒:如果你的CSV文件里有带逗号、引号的字段(比如"Smith, John"),上面的简单拆分逻辑会出错,新手可以试试NuGet上的CsvHelper库,它能轻松处理各种复杂CSV格式

内容的提问来源于stack exchange,提问作者user9470599

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:09:20