texto - leer archivo txt c# streamreader
Manera eficiente de combinar mĂșltiples archivos de texto. (3)
Darin está en el camino correcto. Mi pellizco sería:
using (var output = File.Create("output"))
{
foreach (var file in new[] { "file1", "file2" })
{
using (var input = File.OpenRead(file))
{
input.CopyTo(output);
}
}
}
Tengo varios archivos de texto que necesito leer y combinar en un solo archivo. Los archivos son de diferentes tamaños: 1 - 50 MB cada uno. ¿Cuál es la forma más eficiente de combinar estos archivos sin chocar con la temible System.OutofMemoryException
?
Este es el código utilizado anteriormente para .Net 4.0, pero compatible con .Net 2.0 (para archivos de texto)
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());
}
}
}
Tenga en cuenta que esto leerá el archivo completo en la memoria de una vez. Esto significa que los archivos grandes harán que se use mucha memoria (y si no hay suficiente memoria disponible, puede fallar por completo).
Hazlo en trozos:
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);
}
}
}
}