105 votes

<FileStream vs différences StreamWriter?>

Quelle est la différence entre FileStream et StreamWriter en .NET?

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

Est-il possible de combiner ces deux en un seul?

113voto

Henk Holterman Points 153608

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

Un FileStream est un Stream. Comme tous les Streams, il ne traite que des données en byte[].

Un StreamWriter : TextWriter est un décorateur de Stream. Un TextWriter encode les types primitifs comme les chaînes de caractères, les entiers et les caractères en byte[] puis écrit cela dans le Stream lié.

Dans quel contexte devez-vous les utiliser ? Quels sont leurs avantages et inconvénients ?

Vous utilisez un FileStream nu lorsque vous avez des données en byte[]. Vous ajoutez un StreamWriter lorsque vous voulez écrire du texte. Utilisez un Formatter ou un Serializer pour écrire des données plus complexes.

Est-il possible de combiner ces deux en un seul ?

Oui. Vous avez toujours besoin d'un Stream pour créer un StreamWriter. La méthode d'aide System.IO.File.CreateText("chemin") les créera en combinaison et vous n'aurez qu'à Disposer() le writer externe par la suite.

6 votes

Il est également important de noter que FileStream est un type de flux spécifiquement conçu pour les fichiers. Les flux fonctionnent nativement avec des octets, cependant StreamWriter / Reader va écrire / lire du texte sur n'importe quel flux, pas seulement les FileStream. Par exemple, MemoryStreams, NetworkStreams, etc..

22voto

Hans Passant Points 475940

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

20 votes

En fait, ce n'est pas "tout"... Mais c'est une différence correcte.

16voto

David Stratton Points 45298

Un FileStream est expressément destiné pour travailler avec des fichiers.

Un StreamWriter peut être utilisé pour diffuser vers n'importe quel type de Stream - sockets réseau, fichiers, etc.

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

2 votes

Excellente référence pour les flux, même si elle ne couvre pas les flux en lecture/écriture à accès aléatoire. Particulièrement les informations sur la sérialisation/désérialisation et la démonstration des flux non fichiers sont très utiles. +1

0 votes

La référence n'est plus disponible.

9voto

KeithS Points 36130

Il existe 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 l'entrée et/ou la sortie de données vers et depuis cet emplacement. Les Streams existent pour la lecture/écriture de fichiers, les connexions réseau, la mémoire, les tubes, la console, les auditeurs 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 streams sont assez bas-niveau dans leur utilisation, et traitent les données sous forme d'octets.

Un StreamWriter est un wrapper pour un Stream qui simplifie l'utilisation de ce stream pour la sortie de texte brut. Il expose des méthodes qui prennent des chaînes de caractères au lieu d'octets, et effectue les conversions nécessaires vers et depuis des tableaux d'octets. Il existe d'autres Writers ; l'autre principal que vous utiliseriez est le XmlTextWriter, qui facilite l'écriture de données au format XML. Il existe également des contreparties Reader aux Writers qui enveloppent de manière similaire un Stream et facilitent la récupération des données.

8voto

ChrisF Points 74295

Eh bien, selon le MSDN pour FileStream:

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

et le MSDN pour StreamWriter:

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

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

La page StreamWriter ajoute:

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

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X