Mi sono imbattuto in qualcosa di interessante quando si utilizza uno StreamWriter
con un FileStream
per aggiungere testo a un file esistente in .NET 4.5 (non ho provato alcun framework precedente). Ho provato in due modi, uno ha funzionato e l'altro no. Mi chiedo quale sia la differenza tra i due.Scrittura su file txt con StreamWriter e FileStream
Entrambi i metodi contenevano il seguente codice nella parte superiore
if (!File.Exists(filepath))
using (File.Create(filepath));
ho la creazione in una dichiarazione using
perché ho trovato attraverso l'esperienza personale che è il modo migliore per garantire che l'applicazione si chiude completamente il file .
non METODO DI LAVORO:
using (FileStream f = new FileStream(filepath, FileMode.Append,FileAccess.Write))
(new StreamWriter(f)).WriteLine("somestring");
Con questo metodo non finisce per essere aggiunto al file.
Metodo di lavoro:
using (FileStream f = new FileStream(filepath, FileMode.Append,FileAccess.Write))
using (StreamWriter s = new StreamWriter(f))
s.WriteLine("somestring");
Ho fatto un po 'di usare Google, senza sapere cosa cercare, e non hanno trovato nulla informativo. Quindi, perché l'anonimo StreamWriter
fallisce dove il (non anonimo? Named?) StreamWriter
funziona?
Immagino che 'StreamWriter' in realtà non _write_ qualcosa fino a quando non viene svuotato e il suo metodo' Dispose' che viene chiamato implicitamente usando il blocco 'using' lo svuoterà automaticamente. EDIT: si noti che 'StreamWriter' ha una proprietà [AutoFlush] (http://msdn.microsoft.com/en-us/library/system.io.streamwriter.autoflush.aspx) che potrebbe controllare questo comportamento avendo esso svuota il flusso ogni volta che scrivi che suppongo sia 'falso' di default. –
Questo è stato già risposto, ma perché vorresti formattare un codice del genere? È orrendo leggere e capire l'IMO, oltre che aumentare il rischio introducendo bug attraverso semplici errori di formattazione. Sono un grande fan delle parentesi graffe - sempre! – TheCodeKing
@TheCodeKing se è stata già fornita risposta ti dispiacerebbe fornire un collegamento? L'ho cercato sinceramente e ho esaminato ogni risposta suggerita prima di postare e non ho visto nulla che rispondesse abbastanza (principalmente a causa del mio uso di una funzione anonima). Inoltre, non sono qui per discutere di cose che sono per lo più parte stilistica e basata sulla preferenza. Il codice IMO disseminato di parentesi graffe che non sono effettivamente necessarie è più difficile da leggere. –