Suponiendo que está intentando reemplazar un sección conocida del archivo.
- Abrir una
FileStream
con acceso de lectura/escritura
- Se desplaza hasta el lugar correcto
- los datos existentes de sobrescritura
Código de la muestra viene ...
public static void ReplaceData(string filename, int position, byte[] data)
{
using (Stream stream = File.Open(filename, FileMode.Open))
{
stream.Position = position;
stream.Write(data, 0, data.Length);
}
}
Si' Estamos tratando de hacer una versión binaria de un string.Replace
(por ejemplo, "siempre reemplace los bytes {51, 20, 34 } con {20, 35, 15}, entonces es bastante más difícil. Como una breve descripción de lo que haría:
- asignar un búfer de al menos el tamaño de los datos que le interesa
- repetidamente lee en la memoria intermedia, la exploración de los datos
- Si encontrar una coincidencia, buscará volver al lugar correcto (por ejemplo
stream.Position -= buffer.Length - indexWithinBuffer;
y sobrescribir los datos
sonidos simples hasta ahora ... pero el truco es si los datos comienza cerca del final del búfer. Necesitas recordar todo potenciales coincidencias y cuán lejos ha coincidido hasta el momento, de modo que si obtiene una coincidencia al leer siguiente buffer's-worth, puede detectarlo.
Probablemente hay formas de evitar este astucia, pero no me gustaría tratar de llegar a la ligera con ellos :)
EDIT: Bueno, tengo una idea que podría ayudar ...
- Mantener un tampón que es al menos dos veces tan grande como sea necesario
- repetidamente:
- Copiar el segundo la mitad de su cuestión en la primera mitad
- Llenar la segunda mitad del buffer del archivo
- búsqueda en la memoria intermedia todade los datos que está buscando
De esa manera, en algún momento, si los datos son presente, estará completamente dentro del buffer.
Tendría que tener cuidado acerca de dónde estaba la corriente para volver al lugar correcto, pero creo que debería funcionar.Sería más difícil si estuviera tratando de encontrar todos los partidos, pero al menos el primer partido debe ser razonablemente sencilla ...
archivo abierto en modo escritura, mueva el puntero a la ubicación de las antiguas bytes, escribir nuevos bytes. –
¿Cómo se sabe la posición exacta de los bytes para modificar? ¿Es una corrección de corrección? –