FileStream vs/difference StreamWriter?

Вопрос:

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

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

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

Ответ 1

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

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

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

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

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

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

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

Ответ 2

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

Ответ 3

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

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

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

Ответ 4

Ну, из MSDN для FileStream:

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

и MSDN для StreamWriter:

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

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

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

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

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

Ответ 5

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

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

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

Ответ 6

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