var fs = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.ReadWrite);
using(var writer = new StreamWriter(fs))
writer.Write(....);
Si el archivo contenía anteriormente texto y el texto recién escrito es más corto que el que ya estaba en el archivo, ¿cómo me aseguro de que el contenido final obsoleto en el archivo se trunca?FileStream y StreamWriter: cómo truncar el resto del archivo después de escribir?
Tenga en cuenta que abrir el archivo en modo truncado no es una opción en este caso. El archivo ya está abierto cuando recibo el objeto FileStream
. El código anterior es solo para ilustrar las propiedades de la secuencia.
EDITAR
Ampliando la respuesta a continuación, la solución es:
var fs = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.ReadWrite);
using(var writer = new StreamWriter(fs))
{
writer.Write(....);
writer.Flush();
fs.SetLength(fs.Position);
}
El código de respuesta/solución parece mal a mí: Lectura fs.Position ** ** antes de haber llamado writer.Flush o writer.Dipose() no le dará el número de bytes real. Tienes suerte porque el Stream se expande automáticamente cuando se escribe, pero tu archivo podría fragmentarse innecesariamente debido a las 2 adaptaciones de longitud que se aplican para 1 escritura. – springy76