所以"合并"实际上只是将文件一个接一个地写入吗?这很简单 - 只需打开一个输出流,然后重复打开一个输入流,复制数据,关闭即可。例如:
static void ConcatenateFiles(string outputFile, params string[] inputFiles)
{
using (Stream output = File.OpenWrite(outputFile))
{
foreach (string inputFile in inputFiles)
{
using (Stream input = File.OpenRead(inputFile))
{
input.CopyTo(output);
}
}
}
}
这是使用.NET 4中新增的Stream.CopyTo
方法。如果您不使用.NET 4,则另一个辅助方法会很有用:
private static void CopyStream(Stream input, Stream output)
{
byte[] buffer = new byte[8192];
int bytesRead;
while ((bytesRead = input.Read(buffer, 0, buffer.Length)) > 0)
{
output.Write(buffer, 0, bytesRead);
}
}
据我所知,没有比这更有效率的方法了... 但是重要的是,这不会在你的系统上占用太多内存。它不像是反复将整个文件读入内存,然后再全部写出来。
编辑:正如评论中指出的那样,有一些可以调整文件选项的方法,可能会让它在文件系统处理数据方面稍微更加有效率。但本质上你还是需要逐个缓冲区地读取和写入数据。