Possiedo un StreamWriter il cui stream sottostante è un FileStream
. Il seguente codice garantisce che lo FileStream
svuota anche il proprio buffer nel file effettivo sul file system o è necessario chiamare esplicitamente lo Flush()
su FileStream
?Will StreamWriter.Flush() chiama anche FileStream.Flush()?
using (var fs = new FileStream("blabla", FileMode.Append)) {
using (var sw = new StreamWriter(fs)) {
sw.WriteLine("Hello, I want to be flushed.");
sw.Flush(); //I need this to also flush onto the file, not just to the FileStream
}
}
Come da MSDN, "Lavaggio del flusso non svuotare il suo codificatore sottostante a meno che non si chiama esplicitamente Flush o Chiudi", ma non si sa se un FileStream può essere considerato un "encoder sottostante".
Inoltre, se non si specifica FileOptions.WriteThrough, sono sicuro che il sistema operativo scriverà la linea scaricata sul disco anche se il programma si arresta prima che i due flussi siano stati chiusi (supponendo, ad esempio, nessun blocco , solo una chiamata a Flush()
)?
Nel mio scenario ho bisogno di lasciare il flusso aperto (per la registrazione), quindi non posso usare i blocchi using {}
, ma vorrei assicurarmi che i dati vengano sempre scritti sul disco anche se il programma si blocca. Posso permettermi di perdere i dati se c'è un arresto di alimentazione e il sistema operativo non è stato scaricato sul disco, ma altrimenti ho bisogno che il sistema operativo si svuota anche se non ho mai chiamato correttamente lo streaming Close()
.
Perché non l'hai provato tu stesso? – opewix
Sono interessato a sapere se il comportamento è garantito e possiamo fare affidamento su di esso, non sul fatto che funzioni la maggior parte del tempo. –
sì, lo svuotamento del flusso sottostante. Cancella tutti i buffer per il writer corrente e fa in modo che tutti i dati bufferizzati vengano scritti nel flusso sottostante. – opewix