writeline txt sobrescribir manejo leer escribir ejemplos crear archivos archivo c# streamwriter

txt - streamwriter c#



Añada líneas a un archivo usando StreamWriter (10)

En realidad, solo la respuesta de Jon (5 de septiembre de 2011 a las 9:37) con BaseStream.Seek funcionó para mi caso. Gracias Jon! Necesitaba agregar líneas a un archivo comprimido zip txt.

using (FileStream zipFS = new FileStream(@"c:/Temp/SFImport/test.zip",FileMode.OpenOrCreate)) { using (ZipArchive arch = new ZipArchive(zipFS,ZipArchiveMode.Update)) { ZipArchiveEntry entry = arch.GetEntry("testfile.txt"); if (entry == null) { entry = arch.CreateEntry("testfile.txt"); } using (StreamWriter sw = new StreamWriter(entry.Open())) { sw.BaseStream.Seek(0,SeekOrigin.End); sw.WriteLine("text content"); } } }

Quiero agregar líneas a mi archivo. Estoy usando un StreamWriter:

StreamWriter file2 = new StreamWriter(@"c:/file.txt"); file2.WriteLine(someString); file2.Close();

La salida de mi archivo debe tener varias cadenas debajo de la otra, pero solo tengo una fila, que se sobrescribe cada vez que ejecuto este código.

¿Hay alguna forma de dejar que StreamWriter se anexe a un archivo existente?


Otra opción es usar System.IO.File.AppendText

Esto es equivalente a las sobrecargas de StreamWriter que otros dieron.

También msdn.microsoft.com/en-us/library/ms143356.aspx puede proporcionar una interfaz ligeramente más fácil sin tener que preocuparse por abrir y cerrar la transmisión. Aunque es posible que deba preocuparse por poner sus propios linebreaks. :)


Prueba esto:

StreamWriter file2 = new StreamWriter(@"c:/file.txt", true); file2.WriteLine(someString); file2.Close();


Reemplace esta línea:

StreamWriter sw = new StreamWriter("c:/file.txt");

con este código:

StreamWriter sw = File.AppendText("c:/file.txt");

y luego escribe tu línea en el archivo de texto de esta manera:

sw.WriteLine("text content");


Reemplace esto:

StreamWriter file2 = new StreamWriter("c:/file.txt");

con este:

StreamWriter file2 = new StreamWriter("c:/file.txt", true);

true indica que agrega texto.


Supongo que está ejecutando todo el código anterior cada vez que escribe algo en el archivo. Cada vez que se abre la secuencia del archivo, su puntero de búsqueda se coloca al principio, por lo que todas las escrituras terminan sobrescribiendo lo que estaba allí antes.

Puede resolver el problema de dos maneras: ya sea con el conveniente

file2 = new StreamWriter("c:/file.txt", true);

o reposicionando explícitamente el puntero de la secuencia usted mismo:

file2 = new StreamWriter("c:/file.txt"); file2.BaseStream.Seek(0, SeekOrigin.End);


Una forma más sencilla es usar el File.AppendText anexa texto codificado en UTF-8 a un archivo existente, o a un archivo nuevo si el archivo especificado no existe y devuelve un System.IO.StreamWriter

using (System.IO.StreamWriter sw = System.IO.File.AppendText(logFilePath + "log.txt")) { sw.WriteLine("this is a log"); }


Use esto en su lugar:

new StreamWriter("c://file.txt", true);

Con esta sobrecarga del constructor StreamWriter, usted elige si agrega el archivo o lo sobrescribe.

C # 4 y superior ofrece la siguiente sintaxis, que algunos encuentran más legible:

new StreamWriter("c://file.txt", append: true);



using (FileStream fs = new FileStream(fileName,FileMode.Append, FileAccess.Write)) using (StreamWriter sw = new StreamWriter(fs)) { sw.WriteLine(something); }