Parece que el problema es que el tipo de comprobación File.Exists()
se realiza internamente, lo cual falla si el archivo está oculto (por ejemplo, intenta hacer un FileMode.Create
en un archivo que ya existe). Por lo tanto, use FileMode.OpenOrCreate
para asegurarse de que el archivo se abra o cree incluso si está oculto, o simplemente FileMode.Open
si no desea crearlo si no existe.
Cuando se usa FileMode.OpenOrCreate
, el archivo no se truncará, por lo que debe establecer su longitud al final para asegurarse de que no quede nada después del final del texto.
using (FileStream fs = new FileStream(filename, FileMode.Open)) {
using (TextWriter tw = new StreamWriter(fs)) {
// Write your data here...
tw.WriteLine("foo");
// Flush the writer in order to get a correct stream position for truncating
tw.Flush();
// Set the stream length to the current position in order to truncate leftover text
fs.SetLength(fs.Position);
}
}
Si usa .NET 4.5 o posterior, hay una nueva sobrecarga que impide la eliminación del StreamWriter
para disponer también del flujo subyacente. El código podría entonces ser escrita ligeramente más intuitiva de esta manera:
using (FileStream fs = new FileStream(filename, FileMode.Open)) {
using (TextWriter tw = new StreamWriter(fs, Encoding.UTF8, 1024, false)) {
// Write your data here...
tw.WriteLine("foo");
}
// Set the stream length to the current position in order to truncate leftover text
fs.SetLength(fs.Position);
}
Lo excepción? – tadman
¿Cuál es la excepción que está lanzando? –
¿Qué excepción está lanzando? – Seth