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

如何通过SSIS脚本向百万行平面文件每行末尾追加文本?

解决方案:给百万行文本文件每行追加字符串

你的原代码不可行,核心问题有两个:

  • File.ReadAllLines会直接把文件按行拆分,返回的每个item就是单独的一行内容,不包含换行符\n,所以你用Replace("\n")根本找不到要替换的内容,这就是识别不了换行符的原因。
  • 代码里没有实现写入文件的逻辑,而且额外的拆分操作完全是多余的,还会降低处理效率。

针对百万行的大文件,推荐两种处理方式:

方式一:内存充足时的简化写法

如果文件每行内容不长,内存能一次性容纳所有行数据,可以用这种简洁的写法:

public void Main()
{
    string filePath = @"E:\SSISSource\Source\Source.txt";
    // 读取所有行,给每行末尾追加目标字符串
    var modifiedLines = System.IO.File.ReadAllLines(filePath)
                                      .Select(line => line + "~20221214");
    // 一次性写入覆盖原文件
    System.IO.File.WriteAllLines(filePath, modifiedLines);
    
    Dts.TaskResult = (int)ScriptResults.Success;
}

方式二:超大文件的高效逐行处理

如果文件体积过大(比如每行内容很长,百万行占内存超过数GB),用逐行读写的方式可以大幅降低内存占用,避免内存溢出:

public void Main()
{
    string sourcePath = @"E:\SSISSource\Source\Source.txt";
    string tempPath = @"E:\SSISSource\Source\Source_Temp.txt";
    
    // 用Stream逐行读取、处理、写入临时文件
    using (var reader = new System.IO.StreamReader(sourcePath))
    using (var writer = new System.IO.StreamWriter(tempPath))
    {
        string line;
        while ((line = reader.ReadLine()) != null)
        {
            writer.WriteLine(line + "~20221214");
        }
    }
    
    // 替换原文件:先删原文件,再把临时文件重命名为原文件名
    System.IO.File.Delete(sourcePath);
    System.IO.File.Move(tempPath, sourcePath);
    
    Dts.TaskResult = (int)ScriptResults.Success;
}

这种方式每次只在内存中保留一行数据,内存占用几乎可以忽略,适合处理超大文件。注意临时文件要和原文件放在有足够剩余空间的位置,处理完成后再替换原文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 02:35:19