Quindi "unire" è in realtà solo la scrittura dei file uno dopo l'altro? È piuttosto semplice: basta aprire un flusso di output e quindi aprire ripetutamente un flusso di input, copiare i dati, chiudere. Per esempio:
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);
}
}
}
}
che sta utilizzando il metodo Stream.CopyTo
che è nuova in .NET 4. Se non si sta utilizzando .NET 4, un altro metodo di supporto sarebbe venuto in aiuto:
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);
}
}
Non c'è niente che sono consapevole che è più efficiente di questo ... ma, soprattutto, questo non occuperà affatto molta memoria sul tuo sistema. Non è come se leggesse ripetutamente l'intero file in memoria, quindi lo scrive di nuovo.
MODIFICA: come indicato nei commenti, ci sono modi in cui è possibile armeggiare con le opzioni di file su potenzialmente rendendolo leggermente più efficiente in termini di ciò che il file system fa con i dati. Ma fondamentalmente leggerete i dati e li scrivete, un buffer alla volta, in entrambi i casi.
fonte
2010-08-24 13:17:30
PS: date un'occhiata qui (possibile duplicato): http://stackoverflow.com/questions/444309/what-would-be-the-fastest-way- to-concatenate-three-files-in-c – Abel