- •1 Файлы и потоки
- •2 Потоки данных и классы
- •2.1 Стандартные потоки
- •2.2 Базовые классы для работы с файлами и потоками
- •2.2.1 Основные классы ввода и вывода
- •2.2.2 Классы на базе FileSystemInfo
- •2.2.3 Классы для работы с потоками
- •2.2.4 Классы для работы с потоками текстовых символов
- •2.3 Перечисления
- •3 Работа со стандартными потоками
- •3.1 Стандартный поток ввода
- •3.2 Стандартный поток вывода
- •3.2.1 Стандартный поток вывода сообщений об ошибках
- •3.3 Программа StdStreams
- •4 Создание потоков, связанных с файлами
- •4.1 Открытие потока FileStream
- •4.2 Открытие потоков BinaryWriter и BinaryReader
- •4.3 Закрытие потоков
- •4.4 Запись двоичных данных
- •4.5 Чтение двоичных данных
- •4.6 Программа Binary
- •4.7 Работа с текстовыми файлами
- •5 Выбор кодировки символов
- •5.1 Кодовые страницы
- •5.2 Недостатки модели кодовых страниц
- •5.3 Стандарт UNICODE
- •5.3.1 Unicode в Microsoft Windows NT/2000/XP
- •5.3.2 UNICODE в Microsoft Windows 95
- •5.4 Кодировка текстовых потоков
- •5.5 Кодировка текстовых строк в двоичных потоках
- •6 Буферизация потоков
- •6.1 Буферизация двоичных потоков
- •6.2 Буферизация текстовых потоков
- •6.3 Принудительный сброс буферов
- •7 Потоки в оперативной памяти
- •7.1 Создание потока
- •7.2 Чтение данных
- •7.3 Запись данных
- •7.4 Доступ к буферу потока MemoryStream
- •7.5 Потоки на базе строк string
- •7.6 Потоки класса StringBuilder
- •8 Краткие выводы
- •8.1 Создание и чтение бинарного файла
- •8.2 Создание текстового файла
- •8.3 Добавление в текстовый файл
- •8.4 Чтение и запись в файл строк на русском языке
- •8.5 Посимвольное чтение текстового файла
- •8.6 Построчное чтение текстового файла
- •8.7 Чтение файла полностью
2.3 Перечисления
При работе с потоками, файлами и каталогами вам также потребуются перечисления FileAccess, FileMode, FileShare и SeekOrigin. Они содержат определения констант, нужных для определения режимов создания и открытия файлов, режимов совместного доступа к файлу, а также позиции при произвольном доступе к файлам.
Все эти константы мы будем рассматривать дальше по мере изложения материала этой главы.
3 Работа со стандартными потоками
Приложению С# доступны 3 стандартных потока, которые всегда открыты; стандартный поток ввода, стандартный поток вывода и стандартный поток вывода сообщений об ошибках.
Все перечисленные выше потоки определены в классе Console. Вы можете получить на них ссылки с помощью статических свойств In, Out и Error.
3.1 Стандартный поток ввода
Стандартный поток ввода, который можно получить при помощи статического свойства In, определен как статический объект класса TextReader. Этот класс содержит методы, предназначенные для ввода отдельных символов, строк и блоков текста. Вот как программа может получить ссылку на стандартный поток ввода:
TextReader trln = Console.In;
Чтобы ввести данные из стандартного потока ввода (по умолчанию связанного с клавиатурой компьютера), используйте один из методов, определенных для этого в классе TextReader.
В предыдущих примерах программ мы использовали метод Console. ReadLine, осуществляющий ввод символов из стандартного потока ввода. Аналогичный метод предусмотрен и в классе TextReader:
string s = trln,ReadLine();
Этот оператор вводит текстовую строку с клавиатуры и сохраняет ее в переменной s. В классе TextReader имеются и другие методы, предназначенные для ввода отдельных символов и блока символов.
Метод Read, не имеющий параметров, читает один символ и возвращает его как значение типа int. Если символов больше нет, метод возвращает значение -1. При возникновении ошибок создается исключение lOException, обработку которого необходимо предусмотреть.
3.2 Стандартный поток вывода
Стандартный поток вывода Out создан на базе класса TextWriter, предназначенного для форматированного вывода данных различного типа с целью их визуального отображения в виде текстовой строки.
Для того чтобы получить ссылку на стандартный поток вывода, используйте свойство Console.Out:
TextWriter twOut = Console.Out;
Далее, используя полученную ссылку, можно выводить данные с помощью одного из методов, определенных в классе TextWriter, например с помощью хорошо известного вам по предыдущим примерам программ метода WriteLine:
twOut.WriteLine("Запись в стандартный поток вывода"); Этот метод аналогичен методу Console .WriteLine.
В классе TextWriter определено несколько реализаций метода Write с параметрами различных типов. Вот некоторые из них:
public virtual void Write(bool); public virtual void Write(char); public virtual void Write(char[]); public virtual void Write(decimal); public virtual void Write(double); public virtual void Write(int); public virtual void Write(long); public virtual void Write(object); public virtual void Write(float); public virtual void Write(string); public virtual void Write(uint); public virtual void Write(ulong);
Как видите, вы можете записать в стандартный поток вывода текстовое представление данных различного типа, в том числе и класса obj ect.
Метод WriteLine аналогичен методу Write, отличаясь лишь тем, что он добавляет к записываемой в поток строке символ перехода на следующую строку:
public virtual void WriteLine(bool); public virtual void WriteLine(char); public virtual void WriteLine(char[]); public virtual void WriteLine(decimal); public virtual void WriteLine(double); public virtual void WriteLine(int); public virtual void WriteLine(long); public virtual void WriteLine(object); public virtual void WriteLine(float); public virtual void WriteLine(string); public virtual void WriteLine(uint); public virtual void WriteLine(ulong);
Реализация метода WriteLine без параметров записывает только символ перехода на следующую строку.
3.2.1 Стандартный поток вывода сообщений об ошибках
Стандартный поток вывода сообщений об ошибках Error, так же как и стандартный поток вывода Out, создан на базе класса TextWriter. Поэтому для записи сообщений об ошибках вы можете использовать только что описанные методы Write и WriteLine.
Вот как программа может получить ссылку на стандартный поток вывода сообщений об ошибках:
TextWriter twErr = Console.Error;
По умолчанию сообщения об ошибках выводятся на то же самое устройство вывода