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

C#如何按指定前缀提取CSV行并批量写入新CSV文件

C# 多CSV文件筛选合并实现方案

问题根因

你的代码无法正常写入多文件内容的核心原因如下:

  • File.WriteAllText 方法每次调用都会清空目标文件的原有内容,仅保留当前写入的内容,因此最终只能留存最后一次调用时写入的单行数据
  • 缺少表头单独处理逻辑,会出现表头丢失或多文件表头重复写入的问题
  • 输出文件存放在源CSV目录下,未做排除会导致生成后被重复读取,产生脏数据

修复后完整代码

static void Main(string[] args)
{
    try
    {
        string sourceDirectory = @"C:\temp\csvfiles\";
        string outputPath = @"C:\temp\csvfiles\testdone.csv";
        string filterKeyword = "BAK"; // 可替换为你需要筛选的前缀
        bool isHeaderWritten = false;

        // 枚举所有CSV文件,排除自身生成的输出文件
        var csvFiles = Directory.EnumerateFiles(sourceDirectory, "*.csv", SearchOption.AllDirectories)
                                .Where(f => !f.Equals(outputPath, StringComparison.OrdinalIgnoreCase));

        foreach (string currentFile in csvFiles)
        {
            var allLines = File.ReadAllLines(currentFile).ToList();
            if (allLines.Count == 0) continue;

            // 表头仅写入一次
            if (!isHeaderWritten)
            {
                File.WriteAllText(outputPath, allLines[0] + Environment.NewLine);
                isHeaderWritten = true;
            }

            // 筛选符合条件的行,跳过表头行
            var matchedLines = allLines.Skip(1)
                                       .Where(line => line.Contains(filterKeyword)) // 任意位置包含关键词,如需限定列可调整为Split后的判断
                                       .ToList();

            // 批量追加匹配的行到输出文件
            if (matchedLines.Count > 0)
            {
                File.AppendAllLines(outputPath, matchedLines);
            }
        }
    }
    catch (Exception ex)
    {
        Console.WriteLine($"处理出错:{ex.Message}");
    }
}

逻辑说明

  • 筛选规则:默认判断整行任意位置包含指定关键词,如果你需要限定仅在某一列匹配,可以将line.Contains(filterKeyword)替换为你原有的line.Split(';').Last().Contains("GFP")类的逻辑
  • 写入优化:采用批量追加的方式写入,相比逐行写入性能更高,也不会出现内容覆盖的问题
  • 异常处理:增加了通用异常捕获,方便定位文件读取、写入权限类的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 23:45:07