Вопрос:
Чем отличается FileStream и StreamWriter в dotnet?
Какой контекст вы должны использовать? В чем их преимущество и недостаток?
Можно ли объединить эти два в один?
Вопрос:
Чем отличается FileStream и StreamWriter в dotnet?
Какой контекст вы должны использовать? В чем их преимущество и недостаток?
Можно ли объединить эти два в один?
Чем отличается 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() использовать внешний писатель.
FileStream пишет байты, StreamWriter пишет текст. Это все.
FileStream явно предназначен для рабочих файлов.
StreamWriter может использоваться для потоковой передачи в любой тип Stream - сетевых сокетов, файлов и т.д.
ScottGu объясняет здесь различные объекты Stream: http://www.codeguru.com/Csharp/Csharp/cs_data/streaming/article.php/c4223
Ну, из MSDN для FileStream
:
Предоставляет поток вокруг файла, поддерживающий синхронные и асинхронные операции чтения и записи.
и MSDN для StreamWriter
:
Реализует TextWriter для записи символов в поток в определенной кодировке.
Самое очевидное отличие состоит в том, что FileStream
позволяет выполнять операции чтения/записи, а StreamWriter
- только запись.
Страница StreamWriter
далее добавляет:
StreamWriter предназначен для вывода символов в конкретной кодировке, тогда как классы, полученные из Stream, предназначены для ввода и вывода байтов.
Итак, второе отличие состоит в том, что FileStream
для байтов, а StreamWriter
- для текста.
Это два разных уровня, используемых для вывода информации в известные источники данных.
FileStream - это тип потока, который концептуально является механизмом, который указывает на какое-то местоположение и может обрабатывать входящие и/или исходящие данные в и из этого местоположения. Существуют потоки для чтения/записи файлов, сетевых подключений, памяти, труб, консоли, отладочных и трассировщиков и нескольких других типов источников данных. В частности, FileStream существует для выполнения чтения и записи в файловую систему. Большинство потоков являются довольно низкоуровневыми в их использовании и обрабатывают данные как байты.
StreamWriter - это оболочка для Stream, которая упрощает использование этого потока для вывода простого текста. Он предоставляет методы, которые берут строки вместо байтов, и выполняет необходимые преобразования в байт-массивы и из них. Есть и другие писатели; другой основной, который вы будете использовать, это XmlTextWriter, который облегчает запись данных в формате XML. Есть также Читатели-коллеги для писателей, которые аналогичным образом обертывают поток и облегчают вывод данных.
Одно ключевое различие (в дополнение к вышеприведенным комментариям) может заключаться в том, что FileStream поддерживает случайное чтение и запись в любой файл FileStream.Position. Для больших модификаций файлов это может быть неоценимым.