![](/user_photo/2706_HbeT2.jpg)
- •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 Чтение файла полностью
![](/html/2706/211/html_GKjIcfBniA.usgW/htmlconvd-43pxFj18x1.jpg)
Вы можете также открыть поток и привязать его к файлу с помощью конструктора класса StreamReader;
StreamReader sr = new StreamReader(testFile);
Далее наша программа считывает текстовые строки из файла, вызывая в цикле метод ReadLine:
while(true)
{
String str = sr.ReadLine();
if (str == null) break; Console.WriteLine(str);
}
Этот метод возвращает прочитанную строку или значение null при достижении конца файла.
После завершения работы с потоком StreamReader его следует закрыть методом Close:
sr.Close();
Таким образом, наша программа записывает две строки в файл, а затем читает их оттуда и отображает на консоли:
Каждый охотник желает знать, где сидит фазан! Число "Пи" равно примерно 3,1415926. Файл успешно создан
5 Выбор кодировки символов
Исторически сложилось так, что за всю историю существования компьютеров для представления текстовых символов использовались самые разные кодировки. Когда ваша программа создает файлы, она должна выбрать какую-то конкретную кодировку текстовых символов.
Те из вас, кому, как и авторам этой книги, посчастливилось работать на «больших» компьютерах серии ЕС (аналоги компьютеров IBM 360/370), знакомы с так называемой кодировкой EBCDIC, В ней представлялись латинские символы, символы кириллицы, а также знаки пунктуации и управляющие знаки.
Что же касается современных персональных компьютеров, то для представления текстовых символов различных алфавитов в них используются кодовые страницы (Code Pages) и кодировка UNICODE. Расскажем об этом подробнее.
5.1 Кодовые страницы
До появления ОС Microsoft Windows 95 и Microsoft Windows широко применялась так называемая модель кодовых страниц. В этой модели каждому символу ставилось в соответствие число в диапазоне от 0 до 255. Таким образом, для представления одного символа использовался 1 байт.
Каким способом устанавливается соответствие?
Для ОС MS-DOS было известно по крайней мере несколько таких способов, основанных на применении различных таблиц кодировок: кодировка ASCII, основная и
![](/html/2706/211/html_GKjIcfBniA.usgW/htmlconvd-43pxFj19x1.jpg)
альтернативная, а также некоторые другие.
Компания Microsoft стандартизовала таблицы кодировок, назвав их кодовыми страницами и присвоив каждой странице свой номер. Первые версии MS-DOS работали с расширенным набором символов IBM, в котором отсутствовали символы кириллицы (рис. 6).
Рисунок 6: Расширенный набор символов IBM
Для того чтобы исправить положение, в свое время было разработано немало утилит, предназначенных для загрузки символов кириллицы в память видеоадаптера, а также для переключения раскладок клавиатуры.
В ОС MS-DOS версии 4.01 впервые появилась стандартная кодовая страница с номером 866, содержащая символы кириллицы (рис. 7). С тех пор российские пользователи компьютеров не могут пожаловаться на то, что компания Microsoft обходит их своим вниманием, создавая новые ОС и прикладные программы.
Рисунок 7: Набор символов кодовой страницы 866
Заметим, что для представления символов кириллицы в ОС IBM OS/2 применяется кодировка, соответствующая кодовой странице 866. Пользователи ОС Unix и Linux отдают предпочтение кодировке KOI-8, а пользователи компьютеров Apple Macintosh — своей собственной кодировке, несовместимой ни с одной из перечисленных выше. В Интернете есть немало утилит, предназначенных для перекодирования текстовых файлов, подготовленных в самых разных кодировках.
Когда появилась ОС Microsoft Windows 3.1, в ней также были предусмотрены кодовые страницы. К сожалению, кодовые страницы ANSI Microsoft Windows 3.1 были лишены символов кириллицы (рис. 8).
![](/html/2706/211/html_GKjIcfBniA.usgW/htmlconvd-43pxFj20x1.jpg)
Рисунок 8: Кодовая страница ANSI без символов кириллицы
Для ОС Microsoft Windows 3.1 было создано несколько популярных программ русификации, устанавливающих шрифты с символами кириллицы и переключатели клавиатурных раскладок. При этом применялась кодировка ANSI, показанная на рис. 9.
Рисунок 9: Кодовая страница ANSI с символами кириллицы
Программы MS-DOS, запущенные под управлением ОС Microsoft Windows, пользовались кодовыми страницами DOS (рис. 6 и 7), которые получили название страниц оригинальных производителей оборудования — OEM (Original Equipment Manufacturer).
С появлением русской версии ОС Microsoft Windows 3.1 эта кодировка стала стандартной. Соответствующая кодовая страница получила номер 1251.
К этому моменту было разработано огромное количество шрифтов True Туре с символами кириллицы, коды которых находились в диапазоне от СО до FF. Именно эти шрифты и стали популярны, распространяясь в основном пиратскими способами вместе с программами русификации Microsoft Windows 3.1 или по отдельности.
5.2 Недостатки модели кодовых страниц
Хотя на первый взгляд может показаться, что 1 байта вполне достаточно для представления всех символов, это не всегда так.
Представьте себе, что вам необходимо подготовить документ, содержащий помимо латинских символов и символов кириллицы, например, греческие и немецкие символы, а также дополнительные знаки. Очевидно, что, оставаясь в рамках кодовой страницы 1251