Значит, «слияние» - это просто запись файлов один за другим? Это довольно просто - просто откройте один выходной поток, а затем несколько раз откройте входной поток, скопируйте данные, закройте. Например:
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);
}
}
}
}
Используется метод Stream.CopyTo
, новый в .NET 4. Если вы не используете .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);
}
}
Нет ничего, что я знаю о том, что более эффективно, чем это ... но важно, что это вообще не займет много памяти в вашей системе. Это не значит, что он постоянно читает весь файл в память, а затем записывает все заново.
РЕДАКТИРОВАТЬ: Как отмечено в комментариях, есть способы, которыми вы можете поиграть с параметрами файла, чтобы потенциально сделал его немного более эффективным с точки зрения того, что файловая система делает с данными. Но, по сути, вы будете читать данные и записывать их, буфер за раз, в любом случае.