Mi código hasta ahora
StreamReader reading = File.OpenText("test.txt");
string str;
while ((str = reading.ReadLine())!=null)
{
if (str.Contains("some text"))
{
StreamWriter write = new StreamWriter("test.txt");
}
}
Sé cómo encontrar el texto, pero no tengo idea de cómo reemplazar el texto en el archivo con el mío.
c#
.net
io
streamreader
file-handling
Win Coder
fuente
fuente
Respuestas:
Leer todo el contenido del archivo. Haz un reemplazo con
String.Replace
. Escribir contenido de nuevo al archivo.fuente
Regex.Replace
System out of memory
excepción.Te será difícil escribir en el mismo archivo del que estás leyendo. Una forma rápida es simplemente hacer esto:
Puedes exponerlo mejor con
fuente
ReadAllText
cierra el acceso a los archivos antes deWriteAllText
. Utilizo esta misma técnica en mi propia aplicación.Debe escribir todas las líneas que lee en el archivo de salida, incluso si no las cambia.
Algo como:
Si desea realizar esta operación en su lugar, la forma más fácil es utilizar un archivo de salida temporal y, al final, reemplazar el archivo de entrada con la salida.
(Intentar realizar operaciones de actualización en el medio del archivo de texto es bastante difícil de hacer porque siempre es difícil tener el reemplazo de la misma longitud, dado que la mayoría de las codificaciones son de ancho variable).
EDITAR: en lugar de dos operaciones de archivo para reemplazar el archivo original, mejor usar
File.Replace("input.txt", "output.txt", null)
. (Ver MSDN ).fuente
Es probable que tenga que extraer el archivo de texto en la memoria y luego hacer los reemplazos. Luego tendrá que sobrescribir el archivo utilizando el método que conoce claramente. Entonces, primero deberías:
A continuación, puede recorrer y reemplazar el texto en la matriz.
Este método le da cierto control sobre las manipulaciones que puede hacer. O simplemente puede hacer el reemplazo en una línea
Espero que esto ayude.
fuente
Así es como lo hice con un archivo grande (50 GB):
Intenté 2 formas diferentes: la primera, leer el archivo en la memoria y usar Regex Reemplazar o Cadena Reemplazar. Luego agregué toda la cadena a un archivo temporal.
El primer método funciona bien para algunos reemplazos de Regex, pero Regex.Replace o String.Replace podrían causar un error de falta de memoria si realiza muchos reemplazos en un archivo grande.
El segundo es leer el archivo temporal línea por línea y construir manualmente cada línea usando StringBuilder y agregar cada línea procesada al archivo de resultados. Este método fue bastante rápido.
fuente
fuente
tiendo a usar el código de reenvío simple tanto como puedo, el siguiente código funcionó bien
fuente