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?
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?
Quelle est la différence entre
FileStream
etStreamWriter
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.
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..
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
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.
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 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.