Entonces, ¿"fusionar" es simplemente escribir los archivos uno después del otro? Eso es bastante sencillo: solo abra una secuencia de salida, y luego abra repetidamente una secuencia de entrada, copie los datos, cierre. Por ejemplo:
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);
}
}
}
}
que está utilizando el método Stream.CopyTo
que es nuevo en .NET 4. Si no está utilizando .NET 4, otro método de ayuda sería muy útil:
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);
}
}
No hay nada de lo que soy consciente es de que es más eficiente que esto ... pero, lo que es más importante, esto no ocupará mucha memoria en su sistema. No es como leer repetidamente todo el archivo en la memoria y luego escribir todo de nuevo.
EDITAR: Como se señaló en los comentarios, hay maneras en que puede jugar con las opciones de archivo potencialmente hacerlo un poco más eficiente en términos de lo que hace el sistema de archivos con los datos. Pero, fundamentalmente, vas a leer los datos y escribirlos, un búfer a la vez, en cualquier caso.
PS: echar un vistazo aquí (posible duplicado): http://stackoverflow.com/questions/444309/what-would-be-the-fastest-way- para-concatenar-tres-archivos-en-c – Abel