xaml - visual - streamwriter tutorial
Winrt StreamWriter & StorageFile no sobrescribe completamente el archivo (2)
¿Por qué no usar los métodos de ayuda en la clase FileIO
? Podrías llamar:
FileIO.WriteTextAsync(selectedFileToSave, newTextContents);
Si realmente necesita un StreamWriter
, primero trunque el archivo llamando
FileIO.WriteBytesAsync(selectedFileToSave, new byte[0]);
Y luego continúe con su código existente.
La búsqueda rápida aquí no arrojó nada. Por lo tanto, he comenzado a usar algunas formas bastante indirectas de usar StreamWriter en mi aplicación WinRT. Leer funciona bien, escribir funciona de manera diferente. Lo que estoy viendo es que cuando selecciono mi archivo para escribir, si elijo un nuevo archivo, entonces no hay problema. El archivo se crea como espero. Si elijo sobreescribir un archivo, entonces el archivo se sobrescribe a un punto, pero el punto donde la secuencia deja de escribirse, si el archivo original era grande, entonces los contenidos anteriores existen más allá de donde escribe mi nueva secuencia.
El código es como tal:
public async void WriteFile(StorageFile selectedFileToSave)
{
// At this point, selectedFileToSave is from the Save File picker so can be a enw or existing file
StreamWriter writeStream;
Encoding enc = new UTF8Encoding();
Stream dotNetStream;
dotNetStream = await selectedFileToSave.OpenStreamForWriteAsync();
StreamWriter writeStream = new StreamWriter(dotNetStream, enc);
// Do writing here
// Close
writeStream.Write(Environment.NewLine);
await writeStream.FlushAsync();
await dotNetStream.FlushAsync();
}
¿Alguien puede dar pistas sobre lo que podría estar perdiendo? Faltan muchas funciones en WinRT, por lo que no se siguen realmente las formas de evitar esto
Alternativamente, puede establecer la longitud de la secuencia en 0 con el método SetLength
antes de usar StreamWriter
:
var stream = await file.OpenStreamForWriteAsync();
stream.SetLength(0);
using (var writer = new StreamWriter(stream))
{
writer.Write(text);
}