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

C#读取处理CSV后无法逐行写入,输出格式不符预期求助

CSV处理后无法逐行写入新文件

我正在逐行读取CSV文件(更新并追加部分值)并转换为列表,但写入新CSV时无法实现逐行写入。

实际输出格式:

1  abc 76-8 3 sht 09-9 5 bry 77-0

预期输出格式:

1 abc 76-8
3 sht 09-9
5 bry 77-0

我的代码如下:

using (var reader = new StreamReader(@"D:FileWatcher/File_A.csv"))
{  
    List<string> fulllist = File.ReadAllLines(@"D:FileWatcher/File_A.csv").ToList();
    foreach(var item in fulllist)
    {
        var line = reader.ReadLine();
        var values = line.Split(',').ToList();
        var Col1Value = values[0].Substring(8,2);
        var Col0Value = values[0].Substring(0,7);

        values.RemoveAt(0);

        values.Insert(0, Col1Value);
        values.Insert(0, Col0Value);
        
        string combinedString = string.Join(",", values);

        var PathforFileB = @"D:FileWatcher/Result/File_B.csv";

        File.WriteAllText(PathforFileB, combinedString);
    }
}

问题根源

  1. File.WriteAllText每次执行都会覆盖整个文件,最后只保留最后一次循环生成的内容;
  2. 代码同时用StreamReader和File.ReadAllLines读取同一个文件,属于重复操作,完全没必要;
  3. 处理后的字符串没有添加换行符,导致所有内容挤在一行。

修复方案

方案一:逐行追加写入(简单直接)

先清空目标文件,再用File.AppendAllText把每一行处理后的内容追加到文件末尾,同时加上换行符:

var inputPath = @"D:FileWatcher/File_A.csv";
var outputPath = @"D:FileWatcher/Result/File_B.csv";

// 先清空目标文件(如果不需要保留历史内容)
File.WriteAllText(outputPath, string.Empty);

foreach (var line in File.ReadAllLines(inputPath))
{
    var values = line.Split(',').ToList();
    var Col1Value = values[0].Substring(8, 2);
    var Col0Value = values[0].Substring(0, 7);

    values.RemoveAt(0);
    values.Insert(0, Col1Value);
    values.Insert(0, Col0Value);
    
    string combinedString = string.Join(",", values);
    // 添加换行符后追加到文件
    File.AppendAllText(outputPath, combinedString + Environment.NewLine);
}

方案二:批量写入(更高效)

先把所有处理后的行收集到列表里,最后一次性写入文件,减少IO操作次数:

var inputPath = @"D:FileWatcher/File_A.csv";
var outputPath = @"D:FileWatcher/Result/File_B.csv";

var processedLines = new List<string>();

foreach (var line in File.ReadAllLines(inputPath))
{
    var values = line.Split(',').ToList();
    var Col1Value = values[0].Substring(8, 2);
    var Col0Value = values[0].Substring(0, 7);

    values.RemoveAt(0);
    values.Insert(0, Col1Value);
    values.Insert(0, Col0Value);
    
    processedLines.Add(string.Join(",", values));
}

// 一次性写入所有行,自动添加换行符
File.WriteAllLines(outputPath, processedLines);

额外优化说明

  • 移除了多余的StreamReader,直接用File.ReadAllLines遍历即可;
  • 方案二更适合处理大文件,因为减少了频繁的文件读写操作;
  • 使用Environment.NewLine替代硬编码的\n,保证在不同操作系统下换行符都能正常工作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 04:55:14