Tengo un archivo de 4 Gb que quiero buscar y reemplazar en un byte. He escrito un programa simple para hacerlo, pero lleva demasiado tiempo (90 minutos +) hacer un solo descubrimiento y reemplazarlo. Algunos editores hexadecimales que he probado pueden realizar la tarea en menos de 3 minutos y no cargan todo el archivo de destino en la memoria. ¿Alguien sabe un método donde puedo lograr lo mismo? Aquí está mi código actual:Procesando archivos enormes en C#
public int ReplaceBytes(string File, byte[] Find, byte[] Replace)
{
var Stream = new FileStream(File, FileMode.Open, FileAccess.ReadWrite);
int FindPoint = 0;
int Results = 0;
for (long i = 0; i < Stream.Length; i++)
{
if (Find[FindPoint] == Stream.ReadByte())
{
FindPoint++;
if (FindPoint > Find.Length - 1)
{
Results++;
FindPoint = 0;
Stream.Seek(-Find.Length, SeekOrigin.Current);
Stream.Write(Replace, 0, Replace.Length);
}
}
else
{
FindPoint = 0;
}
}
Stream.Close();
return Results;
}
Buscar y reemplazar son relativamente pequeños en comparación con el "Archivo" de 4G por cierto. Puedo ver fácilmente por qué mi algoritmo es lento, pero no estoy seguro de cómo podría hacerlo mejor.
Antes que nada, lea más de 1 byte a la vez. – SLaks
http://en.wikipedia.org/wiki/Rabin%E2%80%93Karp_algorithm – SLaks