Domanda:
Cosa c'è di diverso tra FileStream
e StreamWriter
in .Net ?
Quale contesto dovresti usarlo? Qual è il loro vantaggio e svantaggio?
È possibile combinare questi due in uno?
Domanda:
Cosa c'è di diverso tra FileStream
e StreamWriter
in .Net ?
Quale contesto dovresti usarlo? Qual è il loro vantaggio e svantaggio?
È possibile combinare questi due in uno?
Risposte:
Cosa c'è di diverso tra FileStream e StreamWriter in dotnet?
A FileStream
è un Stream
. Come tutti gli stream, tratta solo byte[]
dati.
A StreamWriter : TextWriter
, è un decoratore Stream. Un TextWriter codifica i dati di testo come string o char in byte[]
e quindi li scrive nel file linked Stream
.
Quale contesto dovresti usarlo? Qual è il loro vantaggio e svantaggio?
Usi un FileStream nudo quando hai byte[]
dati. Aggiungi un StreamWriter
quando vuoi scrivere del testo. Usa un formattatore o un serializzatore per scrivere dati più complessi.
È possibile combinare questi due in uno?
Sì. Hai sempre bisogno di uno Stream per creare uno StreamWriter. Il metodo helper System.IO.File.CreateText("path")
li creerà in combinazione e quindi dovrai solo Dispose () il writer esterno.
FileStream scrive byte, StreamWriter scrive testo. È tutto.
Un FileStream è esplicitamente destinato ai file di lavoro.
Uno StreamWriter può essere utilizzato per eseguire lo streaming su qualsiasi tipo di flusso : socket di rete, file, ecc.
ScottGu spiega abbastanza bene i diversi oggetti Stream qui: http://www.codeguru.com/Csharp/Csharp/cs_data/streaming/article.php/c4223
Bene, da MSDN per FileStream
:
Espone un flusso attorno a un file, supportando operazioni di lettura e scrittura sincrone e asincrone.
e MSDN per StreamWriter
:
Implementa un TextWriter per scrivere caratteri in un flusso in una particolare codifica.
La differenza più evidente è che FileStream
consente operazioni di lettura / scrittura, mentre StreamWriter
è solo di scrittura.
La StreamWriter
pagina prosegue aggiungendo:
StreamWriter è progettato per l'output di caratteri in una particolare codifica, mentre le classi derivate da Stream sono progettate per l'input e l'output di byte.
Quindi una seconda differenza è che FileStream
è per i byte, mentre StreamWriter
è per il testo.
Sono due diversi livelli utilizzati per inviare informazioni a fonti di dati note.
A FileStream
è un tipo di flusso, che è concettualmente un meccanismo che punta a una posizione e può gestire i dati in entrata e / o in uscita da e verso quella posizione. Esistono flussi per la lettura / scrittura su file, connessioni di rete, memoria, pipe, console, ascoltatori di debug e traccia e alcuni altri tipi di origini dati. In particolare, FileStream
esiste per eseguire letture e scritture nel file system. La maggior parte dei flussi ha un livello di utilizzo piuttosto basso e tratta i dati come byte.
A StreamWriter
è un wrapper per un flusso che semplifica l'utilizzo di tale flusso per l'output di testo normale. Espone metodi che accettano stringhe invece di byte ed esegue le conversioni necessarie da e verso array di byte. Ci sono altri scrittori; l'altro principale che useresti è il XmlTextWriter
, che facilita la scrittura dei dati in formato XML . Ci sono anche controparti Reader per Writers che in modo simile avvolgono uno Stream e facilitano il recupero dei dati.
FileStream
è un tipo di flusso, che è specificamente adattato ai file. I flussi funzionano in modo nativo con i byte, tuttaviaStreamWriter
/ Reader scriverà / leggerà il testo su qualsiasi flusso, non solo suFileStream
s. Ad esempio,MemoryStreams
,NetworkStreams
, ecc ..