FileStream vs / diferencias StreamWriter?


Pregunta:

¿Qué diferencia hay entre FileStream y StreamWriter en dotnet?

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

¿Es posible combinar estos dos en uno?

Author: Mark Cidade, 2011-02-11

6 answers

¿Qué diferencia hay entre FileStream y StreamWriter en dotnet?

A FileStream es a Stream. Como todos los flujos, solo trata con datos byte[].

A StreamWriter : TextWriter, es un decorador de flujo. Un TextWriter codifica datos de texto como string o char en byte[] y luego los escribe en el Stream vinculado.

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

Utiliza un flujo de archivos desnudo cuando tiene datos byte[]. Usted añade un StreamWriter cuando quieras escribir texto. Utilice un formateador o un serializador para escribir datos más complejos.

¿Es posible combinar estos dos en uno?

Sí. Siempre necesitas un Stream para crear un StreamWriter. El método helper System.IO.File.CreateText("path") los creará en combinación y entonces solo tienes que Disponer() del escritor externo.

 85
Author: Henk Holterman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-11 18:54:38

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

 18
Author: Hans Passant,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-02-10 22:55:59

Un FileStream está explícitamente destinado a archivos de trabajo.

Un StreamWriter se puede utilizar para transmitir a cualquier tipo de Stream - sockets 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

 14
Author: David,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-02-10 22:56:31

Bueno, desde el MSDN para FileStream:

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

Y el MSDN para StreamWriter:

Implementa un TextWriter para escribir caracteres a una secuencia en una codificación particular.

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

La página StreamWriter pasa a añadir:

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

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

 7
Author: ChrisF,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-02-10 22:58:59

Son dos niveles diferentes utilizados para enviar información a fuentes de datos conocidas.

Un flujo de archivos es un tipo de flujo, que es conceptualmente un mecanismo que apunta a alguna ubicación y puede manejar datos entrantes y/o salientes hacia y desde esa ubicación. Los flujos existen para leer / escribir en archivos, conexiones de red, memoria, tuberías, la consola, oyentes de depuración y rastreo, y algunos otros tipos de fuentes de datos. Específicamente, existe un FileStream para realizar lecturas y sistema de archivos. La mayoría de las transmisiones son de un nivel bastante bajo en su uso, y tratan los datos como bytes.

Un StreamWriter es un envoltorio para una secuencia que simplifica el uso de esa secuencia para generar 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 usarías es el XmlTextWriter, que facilita la escritura de datos en formato XML. También hay contrapartes del lector a los Escritores que del mismo modo, envuelva un flujo y facilite la recuperación de los datos.

 5
Author: KeithS,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-02-11 00:25:31

Una diferencia clave (además de los comentarios anteriores), podría ser que FileStream admite acceso al disco aleatorio leído y escribe en cualquier FileStream especificado.Posición. Para modificaciones de archivos grandes, eso puede ser invaluable.

 0
Author: beanmf,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-11-17 19:42:08