FileStream vs / differenze StreamWriter?


85

Domanda:

Cosa c'è di diverso tra FileStreame StreamWriterin .Net ?

Quale contesto dovresti usarlo? Qual è il loro vantaggio e svantaggio?

È possibile combinare questi due in uno?

Risposte:


98

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 StreamWriterquando 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.


4
Inoltre è importante notare che FileStreamè un tipo di flusso, che è specificamente adattato ai file. I flussi funzionano in modo nativo con i byte, tuttavia StreamWriter/ Reader scriverà / leggerà il testo su qualsiasi flusso, non solo su FileStreams. Ad esempio, MemoryStreams, NetworkStreams, ecc ..
iliketocode

19

FileStream scrive byte, StreamWriter scrive testo. È tutto.


14
In realtà, non è "tutto" ... Ma è una differenza corretta.
David

14

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


1
Ottimo riferimento per i flussi, sebbene non copra i flussi R / W ad accesso casuale. Soprattutto le informazioni di serializzazione / deserializzazione e la dimostrazione di flussi non di file sono molto utili. +1
ThunderGr

7

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 FileStreamconsente operazioni di lettura / scrittura, mentre StreamWriterè solo di scrittura.

La StreamWriterpagina 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.


6

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, FileStreamesiste 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.


0

Una differenza fondamentale (oltre ai commenti precedenti), potrebbe essere che FileStream supporta l'accesso casuale al disco in lettura e scrittura su qualsiasi FileStream.Position specificato. Per modifiche di file di grandi dimensioni, ciò può essere inestimabile.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.