web-dev-qa-db-fra.com

FileStream vs/differences StreamWriter?

Question:

Quelle est la différence entre FileStream et StreamWriter dans dotnet?

Quel contexte êtes-vous censé utiliser? Quels sont leurs avantages et inconvénients?

Est-il possible de combiner ces deux en un?

75
What'sUP

Quelle est la différence entre FileStream et StreamWriter dans dotnet?

Une FileStream est une Stream. Comme tous les flux, il ne traite que des données byte[].

Un StreamWriter : TextWriter, est un décorateur de flux. Un TextWriter code les données texte telles que chaîne ou caractère dans byte[] et les écrit ensuite dans la variable Stream liée.

Quel contexte êtes-vous censé utiliser? Quels sont leurs avantages et inconvénients? 

Vous utilisez un FileStream nu lorsque vous avez des données byte[]. Vous ajoutez une StreamWriter lorsque vous voulez écrire du texte. Utilisez un formateur ou un sérialiseur pour écrire des données plus complexes.

Est-il possible de combiner ces deux en un?

Oui. Vous avez toujours besoin d'un Stream pour créer un StreamWriter. La méthode d'assistance System.IO.File.CreateText("path") les créera en combinaison et il ne vous restera plus qu'à Dispose () l'écrivain extérieur. 

89
Henk Holterman

FileStream écrit des octets, StreamWriter écrit du texte. C'est tout.

18
Hans Passant

Un FileStream est explicitement destiné aux fichiers de travail.

Un StreamWriter peut être utilisé pour diffuser sur tout type de Stream - sockets réseau, fichiers, etc.

ScottGu explique les différents objets de flux assez bien ici: http://www.codeguru.com/Csharp/Csharp/cs_data/streaming/article.php/c4223

14
David

Eh bien, à partir du MSDN pour FileStream :

Expose un flux autour d'un fichier, prenant en charge les opérations de lecture et d'écriture synchrones et asynchrones.

et le MSDN pour StreamWriter :

Implémente un TextWriter pour écrire des caractères dans un flux dans un codage particulier.

La différence la plus évidente est que FileStream permet les opérations de lecture/écriture, alors que StreamWriter est en écriture uniquement.

La page StreamWriter ajoute:

StreamWriter est conçu pour la sortie de caractères dans un codage particulier, alors que les classes dérivées de Stream sont conçues pour les entrées et les sorties d'octets.

Donc, une deuxième différence est que FileStream est pour les octets, alors que StreamWriter est pour le texte.

7
ChrisF

Ce sont deux niveaux différents utilisés pour la sortie d'informations vers des sources de données connues.

Un FileStream est un type de Stream, qui est conceptuellement un mécanisme qui pointe vers un emplacement et peut gérer des données entrantes et/ou sortantes depuis et vers cet emplacement. Les flux existent pour la lecture/écriture dans les fichiers, les connexions réseau, la mémoire, les canaux, la console, les écouteurs de débogage et de trace et quelques autres types de sources de données. Plus précisément, un FileStream existe pour effectuer des lectures et des écritures sur le système de fichiers. La plupart des flux ont un niveau d'utilisation relativement bas et traitent les données sous forme d'octets.

StreamWriter est un wrapper pour un flux qui simplifie l'utilisation de ce flux pour générer du texte brut. Il expose les méthodes qui prennent des chaînes au lieu d'octets et effectue les conversions nécessaires vers et à partir de tableaux d'octets. Il y a d'autres écrivains; L’autre principal que vous utiliseriez est XmlTextWriter, qui facilite l’écriture de données au format XML. Il existe également des homologues Reader des Writers qui enrubannent de la même manière un flux et facilitent la restitution des données.

5
KeithS

Une différence essentielle (en plus des commentaires ci-dessus) pourrait être que FileStream prend en charge l’accès au disque aléatoire en lecture et en écriture sur tout fichier FileStream.Position spécifié. Pour les modifications de fichiers volumineux, cela peut être inestimable.

0
beanmf