组合多个文本文件的有效方式

本文关键字:有效 方式 文件 文本 组合 | 更新日期: 2023-09-27 17:58:49

我有多个文本文件,需要读取并合并到一个文件中。这些文件的大小各不相同:每个文件1-50 MB。在不碰到令人恐惧的System.OutofMemoryException的情况下,组合这些文件最有效的方法是什么?

组合多个文本文件的有效方式

分块执行:

const int chunkSize = 2 * 1024; // 2KB
var inputFiles = new[] { "file1.dat", "file2.dat", "file3.dat" };
using (var output = File.Create("output.dat"))
{
    foreach (var file in inputFiles)
    {
        using (var input = File.OpenRead(file))
        {
            var buffer = new byte[chunkSize];
            int bytesRead;
            while ((bytesRead = input.Read(buffer, 0, buffer.Length)) > 0)
            {
                output.Write(buffer, 0, bytesRead);
            }
        }
    }
}

Darin走在了正确的轨道上。我的调整是:

using (var output = File.Create("output"))
{
    foreach (var file in new[] { "file1", "file2" })
    {
        using (var input = File.OpenRead(file))
        {
            input.CopyTo(output);
        }
    }
}

这是上面用于的代码。Net 4.0,但与兼容。Net 2.0(用于文本文件)

using (var output = new StreamWriter("D:''TMP''output"))
{
  foreach (var file in Directory.GetFiles("D:''TMP", "*.*"))
  {
    using (var input = new StreamReader(file))
    {
      output.WriteLine(input.ReadToEnd());
    }
  }
}

请注意,这将一次读取内存中的整个文件。这意味着大文件将导致大量内存被使用(如果没有足够的内存,它可能会一起失败)。

copy *.txt <combined_fileName>.txt

我也认为这是最好的方法。在3小时内合并了450多个文件,并用excel删除了不需要的记录,如文件标题、页脚等。