Различные способы чтения и записи файлов в C # - PullRequest
2 голосов
/ 11 ноября 2009

Я пытаюсь понять различные способы чтения и записи файлов с их преимуществами и недостатками. Например, когда использовать TextWriter / TextReader, когда File.Create или StreamReader / StreamWriter FileStream и т. Д.

Когда использовать что?

Ответы [ 5 ]

7 голосов
/ 11 ноября 2009

Статические методы File.* - это просто простые способы создания новых FileStream s, FileWriter s и т. Д. Они очень полезны - я обычно использую File. * Вместо явного вызова конструкторов, если мне не нужны некоторые поведение, которое не учитывается.

Основная критическая точка:

  • Для двоичных данных используйте Stream
  • Для текстовых данных используйте TextWriter / TextReader

Если вы начнете пытаться читать двоичные данные с помощью TextReader, произойдут плохие вещи.

5 голосов
/ 11 ноября 2009

Stream - это абстрактный класс, представляющий последовательность из байтов .

  • FileStream происходит от Stream и позволяет вам обрабатывать файл как Stream.

TextReader / TextWriter - это абстрактные классы, которые позволяют читать / писать символов .

  • StreamReader / StreamWriter являются производными от TextReader / TextWriter и предоставляют реализации для чтения / записи из / в поток (который может быть FileStream) с использованием Encoding .

Статические методы File.* - это просто удобные методы для упрощения создания FileStream.

3 голосов
/ 11 ноября 2009

Я, конечно, далеко не эксперт по этой теме, но я просто хочу отметить, что TextReader и TextWriter являются базовыми классами (я думаю, абстрактными), которые используются многими другими классами для работы с различными типами. ввода / вывода. StreamReader и StreamWriter следует использовать, когда вы имеете дело с Stream объектами, содержащими текст, такими как FileStream для текстового файла. Но TextReader не обязательно должен иметь дело с потоками; Возьмем, к примеру, класс StringReader, который также наследуется от TextReader и просто читает простую строку.

1 голос
/ 11 ноября 2009

Не забудьте статические вспомогательные методы System.IO.File.WriteAllByte(...), .WriteAllText(...) .WriteAllLines(...) и соответствующие им методы .ReadAllByte(...), .ReadAllText(...) и .ReadAllLines(...). Если у меня нет причин портить поток, я использую их, потому что это быстрый метод ввода / вывода файла.

1 голос
/ 11 ноября 2009

Базовый механизм, который использует каждый из этих процессов, одинаков, поэтому ни один не «лучше», чем другой.

Разница заключается в простоте выполнения определенных задач. Например, File.CreateText возвращает StreamWriter, который функционально ничем не отличается от ручного создания StreamWriter и использования его для записи в файл. Просто требуется меньше кода. (Я думаю об этом как ярлык).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...