2011-02-10 17 views

Respuesta

79

¿Qué es diferente entre FileStream y StreamWriter en dotnet?

A FileStream es un Stream. Al igual que todas las transmisiones, solo se trata de byte[] de datos.

A StreamWriter : TextWriter, es un decorador de secuencias. Un TextWriter codifica datos de texto como cadena o char a byte[] y luego lo escribe en el Stream vinculado.

¿Qué contexto se supone que debes usarlo? ¿Cuál es su ventaja y desventaja?

Utiliza un FileStream sin formato cuando tiene datos byte[]. Agregue un StreamWriter cuando desee escribir texto. Use un formateador o un serializador para escribir datos más complejos.

¿Es posible combinar estos dos en uno?

Sí. Siempre necesita un Stream para crear un StreamWriter. El método de ayuda System.IO.File.CreateText("path") los creará en combinación y solo tendrá que deshacerse del escritor externo.

+1

También es importante tener en cuenta que 'FileStream' es un tipo de transmisión, que se adapta específicamente a los archivos. Las secuencias funcionan de forma nativa con bytes, sin embargo, 'StreamWriter'/Reader escribirá/leerá texto en * cualquier * secuencia, no solo' FileStream's. Por ejemplo, 'MemoryStreams',' NetworkStreams', etc. – iliketocode

18

FileStream escribe bytes, StreamWriter escribe texto. Eso es todo.

+11

En realidad, eso no es "todo" ... Pero es una diferencia correcta. – David

14

Un FileStream está diseñado expresamente para archivos de trabajo.

Un StreamWriter se puede utilizar para transmitir a cualquier tipo de Stream - conectores de red, archivos, etc.

ScottGu explica los diferentes objetos de flujo bastante bien aquí: http://www.codeguru.com/Csharp/Csharp/cs_data/streaming/article.php/c4223

+1

Excelente referencia para transmisiones, aunque no cubre transmisiones R/W de acceso aleatorio. Especialmente la información de serialización/deserialización y la demostración de flujos no de archivos son muy útiles. +1 – ThunderGr

7

Bueno, desde el MSDN para FileStream :

Expone un flujo alrededor de un archivo, admitiendo operaciones de lectura y escritura síncronas y asíncronas.

y la MSDN para StreamWriter:

implementa un TextWriter para la escritura de caracteres a una corriente en una codificación particular.

La diferencia más obvia es que FileStream permite operaciones de lectura/escritura, mientras que StreamWriter es escribir solamente.

La página StreamWriter va a añadir:

StreamWriter está diseñado para la salida de caracteres en una codificación particular, mientras que las clases derivadas de corriente están diseñados para entrada y salida de bytes.

Así que una segunda diferencia es que FileStream es para bytes, mientras que StreamWriter es para texto.

5

Son dos niveles diferentes que se utilizan para generar información en orígenes de datos conocidos.

FileStream es un tipo de Stream, que conceptualmente es un mecanismo que apunta a alguna ubicación y puede manejar datos entrantes y/o salientes desde y hacia esa ubicación. Existen secuencias para leer/escribir en archivos, conexiones de red, memoria, tuberías, consola, detectores de depuración y rastreo, y algunos otros tipos de fuentes de datos. Específicamente, existe FileStream para realizar lecturas y escrituras en el sistema de archivos. La mayoría de las transmisiones tienen un uso bastante bajo y tratan los datos como bytes.

Un StreamWriter es un contenedor para un flujo que simplifica el uso de ese flujo para producir texto sin formato. Expone métodos que toman cadenas en lugar de bytes y realiza las conversiones necesarias hacia y desde matrices de bytes. Hay otros escritores; el otro principal que utilizaría es XmlTextWriter, que facilita la escritura de datos en formato XML. También hay contrapartes de Reader para los escritores que envuelven de manera similar un flujo y facilitan la recuperación de los datos.

0

Una diferencia clave (además de los comentarios anteriores), podría ser que FileStream admite lectura y escritura de accesos de disco aleatorios a cualquier FileStream.Position especificada. Para modificaciones de archivos grandes, eso puede ser invaluable.

Cuestiones relacionadas