"C# для профессионалов. Том II" - читать интересную книгу автора (Робинсон Симон, Корнес Олли, Глинн Джей,...)

Чтение и запись текстовых файлов

Теоретически вполне возможно использование класса FileStream для чтения и вывода текстовых файлов. В конце концов, мы уже продемонстрировали, как это делается. Формат, в котором выводился выше файл CivNegotiations.txt, был не очень удобен для пользователя, но это было связано не с какой-либо внутренней проблемой класса FileStream, а со способом, который был выбран для вывода результатов в текстовом поле.

Если известно, что определенный файл содержит текст, то будет более удобно прочитать его с помощью классов StreamReader и StreamWriter. Это связано с тем, что эти классы работают на чуть более высоком уровне, и предназначены специально для чтения текста. Методы, которые они реализуют, способны автоматически определять, где находятся удобные точки для остановки чтения, основываясь на содержимом потока. В частности:

#9633; Эти классы реализуют методы для чтения или записи одной строки текста за раз (StreamReader.ReadLine() и StreamWriter.WriteLine()). В случае чтения, это значит, что поток будет автоматически определять, где находится следующий перевод каретки, и остановит чтение в этой точке. В случае записи это означает, что поток будет автоматически добавлять комбинацию возврата каретки-перевода строки в записываемый текст.

#9633; При использовании классов StreamReader и StreamWriter не нужно беспокоиться об использованном в файле кодировании. Кодирование означает формат, который имел текст в содержащем его файле. Возможное кодирование включает ASCII (1 байт для каждого символа), или любой из форматов на основе Unicode, UTF7 и UTF8. Текстовые файлы в системах Windows 9х всегда являются ASCII, так как Windows 9х не поддерживает Unicode, и поэтому текстовые файлы могут теоретически содержать данные Unicode, UTF7 или UTF8 вместо данных ASCII. Соглашение состоит в том, что если файл имеет формат ASCII, значит он содержит текст. Если же любой из форматов Unicode, то он будет указан первыми двумя или тремя байтами файла, которые содержат определенную комбинацию значений для указания формата. Эти байты называются маркерами кода байтов. Когда файл открывается с помощью любого стандартного оконного приложения, такого как Notepad или WordPad, то не нужно беспокоиться об этом, так как эти приложения знакомы с различными методами кодирования и автоматически правильно считывают файл. Это также случай для класса StreamReader, который будет правильно считывать файл в любом из этих форматов, в то время как класс StreamWriter способен форматировать текст, который он записывает, с помощью любой запрошенной техники кодирования. С другой стороны, если требуется прочитать и вывести текстовый файл с помощью класса FileStream, придется все это выполнять самостоятельно.