FileStream против / отличий StreamWriter? - PullRequest
78 голосов
/ 11 февраля 2011

Вопрос:

Чем отличается FileStream от StreamWriter в dotnet?

В каком контексте вы должны его использовать?В чем их преимущество и недостаток?

Можно ли объединить эти два в одно?

Ответы [ 6 ]

91 голосов
/ 11 февраля 2011

Чем отличается FileStream от StreamWriter в dotnet?

A FileStream - это Stream.Как и все потоки, он имеет дело только с byte[] данными.

A StreamWriter : TextWriter, является Stream-decorator.TextWriter кодирует текстовые данные, такие как строка или символ, в byte[], а затем записывает их в связанный Stream.

В каком контексте вы должны его использовать?В чем их преимущество и недостаток?

Вы используете пустой FileStream, когда у вас есть byte[] данные.Вы добавляете StreamWriter, когда хотите написать текст.Используйте Formatter или Serializer для записи более сложных данных.

Возможно ли объединить эти два в одно?

Да.Вам всегда нужен поток для создания StreamWriter.Вспомогательный метод System.IO.File.CreateText("path") создаст их в комбинации, и тогда вам нужно только удалить Dispose () внешнего писателя.

18 голосов
/ 11 февраля 2011

FileStream пишет байты, StreamWriter пишет текст.Вот и все.

14 голосов
/ 11 февраля 2011

FileStream явно предназначен для рабочих файлов.

StreamWriter может использоваться для потоковой передачи на любой тип Stream - сетевые сокеты, файлы и т. Д.

ScottGu довольно хорошо объясняет различные объекты Stream: http://www.codeguru.com/Csharp/Csharp/cs_data/streaming/article.php/c4223

7 голосов
/ 11 февраля 2011

Ну, из MSDN для FileStream:

Предоставляет поток вокруг файла, поддерживая синхронные и асинхронные операции чтения и записи.

и MSDN для StreamWriter:

Реализует TextWriter для записи символов в поток в определенной кодировке.

Самым очевидным отличием является то, что FileStream допускает операции чтения / записи, тогда как StreamWriter только для записи.

Страница StreamWriter добавляет:

StreamWriter предназначен для вывода символов в определенной кодировке, тогда как классы, полученные из Stream, предназначены для ввода и вывода байтов.

Второе отличие состоит в том, что FileStream для байтов, а StreamWriter для текста.

5 голосов
/ 11 февраля 2011

Это два разных уровня, используемые при выводе информации в известные источники данных.

FileStream - это тип Stream, который концептуально представляет собой механизм, который указывает на какое-то местоположение и может обрабатывать входящие и / или исходящие данные в и из этого местоположения. Существуют потоки для чтения / записи в файлы, сетевые соединения, память, каналы, консоль, прослушиватели отладки и трассировки и некоторые другие типы источников данных. В частности, существует FileStream для чтения и записи в файловую систему. Большинство потоков довольно низкого уровня использования и обрабатывают данные в байтах.

StreamWriter - это оболочка для потока, которая упрощает использование этого потока для вывода простого текста. Он предоставляет методы, которые принимают строки вместо байтов, и выполняет необходимые преобразования в и из байтовых массивов. Есть другие писатели; другой основной, который вы бы использовали, это XmlTextWriter, который облегчает запись данных в формате XML. Существуют также аналоги Reader для Writers, которые аналогичным образом переносят поток и облегчают получение данных обратно.

0 голосов
/ 17 ноября 2017

Одно ключевое отличие (в дополнение к вышеприведенным комментариям) может заключаться в том, что FileStream поддерживает произвольное чтение с диска и запись в любой указанный FileStream.Position. Для больших модификаций файлов это может быть неоценимо.

...