结合多个文本文件的有效方法

我有多个文本文件需要阅读并合并到一个文件中。 文件大小不一:每个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); } } } } 

达林走在正确的轨道上。 我的调整是:

 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()); } } } 

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