- •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 Чтение файла полностью
Лекция
Работа с файлами в C#
Содержание |
|
|
1 Файлы и потоки.......................................................................................................................... |
3 |
|
2 Потоки данных и классы........................................................................................................... |
3 |
|
2.1 |
Стандартные потоки.......................................................................................................... |
3 |
2.2 |
Базовые классы для работы с файлами и потоками........................................................ |
4 |
2.2.1 Основные классы ввода и вывода............................................................................. |
4 |
|
2.2.2 Классы на базе FileSystemInfo................................................................................... |
4 |
|
2.2.3 Классы для работы с потоками................................................................................. |
5 |
|
2.2.4 Классы для работы с потоками текстовых символов.............................................. |
6 |
|
2.3 |
Перечисления...................................................................................................................... |
7 |
3 Работа со стандартными потоками.......................................................................................... |
7 |
|
3.1 |
Стандартный поток ввода.................................................................................................. |
7 |
3.2 |
Стандартный поток вывода............................................................................................... |
7 |
3.2.1 Стандартный поток вывода сообщений об ошибках.............................................. |
8 |
|
3.3 |
Программа StdStreams....................................................................................................... |
9 |
4 Создание потоков, связанных с файлами.............................................................................. |
10 |
|
4.1 |
Открытие потока FileStream............................................................................................ |
10 |
4.2 |
Открытие потоков BinaryWriter и BinaryReader............................................................ |
12 |
4.3 |
Закрытие потоков............................................................................................................. |
12 |
4.4 |
Запись двоичных данных................................................................................................ |
12 |
4.5 |
Чтение двоичных данных................................................................................................ |
13 |
4.6 |
Программа Binary............................................................................................................. |
14 |
4.7 |
Работа с текстовыми файлами........................................................................................ |
16 |
5 Выбор кодировки символов.................................................................................................... |
18 |
|
5.1 |
Кодовые страницы............................................................................................................ |
19 |
5.2 |
Недостатки модели кодовых страниц............................................................................. |
21 |
5.3 |
Стандарт UNICODE......................................................................................................... |
21 |
5.3.1 Unicode в Microsoft Windows NT/2000/XP............................................................. |
22 |
|
5.3.2 UNICODE в Microsoft Windows 95......................................................................... |
22 |
|
5.4 |
Кодировка текстовых потоков......................................................................................... |
22 |
5.5 |
Кодировка текстовых строк в двоичных потоках.......................................................... |
25 |
6 Буферизация потоков............................................................................................................... |
27 |
|
6.1 |
Буферизация двоичных потоков..................................................................................... |
27 |
6.2 |
Буферизация текстовых потоков..................................................................................... |
28 |
6.3 |
Принудительный сброс буферов..................................................................................... |
29 |
7 Потоки в оперативной памяти................................................................................................ |
30 |
|
7.1 |
Создание потока............................................................................................................... |
30 |
7.2 |
Чтение данных.................................................................................................................. |
31 |
7.3 |
Запись данных.................................................................................................................. |
32 |
7.4 |
Доступ к буферу потока MemoryStream......................................................................... |
34 |
7.5 |
Потоки на базе строк string............................................................................................. |
35 |
7.6 |
Потоки класса StringBuilder............................................................................................ |
37 |
1 Файлы и потоки
Большинство программ так или иначе работают с каталогами и файлами. Средства для работы с файлами предусмотрены практически в любом языке программирования. Эти средства могут быть встроены непосредственно в язык, а также входить в стандартные библиотеки функций и классов, поставляющихся вместе с компилятором.
Программы, составленные на языке С#, работают с каталогами и файлами при помощи специально предназначенных для этого классов, входящих в состав библиотеки классов Microsoft .NET Framework.
2 Потоки данных и классы
Все операции с файлами выполняются в программах С# с помощью так называемых потоков данных (data stream).
Программы могут выполнять над потоками данных 3 операции:
•запись данных в поток,
•чтение данных из потока,
•позиционирование.
Для потоков, связанных с файлами, определено также такое понятие, как текущая позиция внутри файла.
Перед началом операций ввода-вывода программа должна открыть поток. При этом текущая позиция устанавливается на начало файла. При чтении файла или записи в файл блоков данных текущая позиция сдвигается к концу файла на количество байтов, равное размеру прочитанного или записанного блока данных. При помощи средств позиционирования программа может установить текущую позицию в произвольное место файла. Когда работа с файлом закончена, программа обязательно должна закрыть соответствующий поток явным образом.
Программа С# может работать с потоками нескольких типов:
•стандартными потоками ввода и вывода,
•потоками, связанными с локальными файлами,
•потоками, связанными с файлами в оперативной памяти.
Рассмотрим кратко классы библиотеки Microsoft .NET Framework, связанные с потоками перечисленных выше типов.
2.1 Стандартные потоки
Стандартные потоки обычно связаны с консолью и клавиатурой, но могут быть перенаправлены в файлы средствами ОС. По своему назначению эти потоки больше всего напоминают стандартные потоки ввода и вывода, а также стандартный поток вывода сообщений об ошибках ОС MS-DOS.
Практически все программы, исходные тексты которых приводились в нашей книге, работают со стандартными потоками ввода и вывода. Для вывода данных в стандартный поток вывода мы применяли методы System.Console.Write и System.Console.WriteLine. Ввод данных из стандартного потока выполнялся с помощью метода System.Console.ReadLine.