Хранение данных в файлах
Консольные программы в настоящей книге в большинстве случаев получают входные данные с консоли и выводят результат работы на консоль. Однако стоит заметить, что вероятность встретить в реальном мире программу, не работающую с файлами, сопоста вима с вероятностью встретить в академическом институте рекламу казино в Ницце.
Классы для работы с файлами определены в пространстве имен System.IO. Базо вым классом для файлового ввода-вывода является класс FileStream. Для работы с файлом
программист должен его открыть. Команда open подготавливает файл
к работе и возвращает его дескриптор. Обычно дескриптор — это просто число, которое используется всякий раз при чтении из файла или записи в него.
Асинхронный ввод-вывод: есть ли что-то хуже ожидания?
Обычно программа ожидает завершения ее запроса на ввод-вывод и только затем продолжает выполнение. Вызовите метод read ( ) , и в общем случае вы не получите управление назад до тех пор, пока данные из файла не будут считаны
Такой способ работы называется синхронным вводом-выводом.
Классы С# System.IO поддерживают также и асинхронный ввод-вывод. При ис пользовании асинхронного ввода-вывода вызов read () тут же вернет управление программе, позволяя ей заниматься чем-то еще, пока ее запрос на чтение данных из файла выполняется в фоновом режиме. Программа может проверить флаг выполнения запроса, чтобы узнать, завершено ли его выполнение.
Это чем-то напоминает варианты приготовления гамбургеров. При синхронном изго товлении вы нарезаете мясо и жарите его, после чего нарезаете лук и выполняете все остальные действия по приготовлению гамбургера. При асинхронном приготовлении вы начинаете жарить мясо, и, поглядывая на него, тут же, не дожидаясь готовности мяса, начинаете резать лук и делать все остальное.
Асинхронный ввод-вывод может существенно повысить производительность про граммы, но при этом вносит дополнительный уровень сложности.
С# использует более интуитивный подход. Он связывает каждый файл с объектом класса FileStream. Конструктор класса FileStream открывает файл, а методы FileStream выполняют операции ввода-вывода.
FileStream— не единственный класс, который может осуществлять файловый ввод-вывод. Однако он предоставляет хорошую основу для работы с файлами, выполняя 90% всех ваших нужд по работе с ними. Это корневой класс, описываемый в данном разделе. Он достаточно хорош для С# и для вас.
FileStream— фундаментальный класс. Весь набор его действий — это открытие фай ла, чтение и запись блока байтов. К счастью, пространство имен System.І0 содержит, по мимо прочего, следующий набор классов, которые обернуты вокруг FileStream и предос тавляют более простые и богатые возможности.
BinaryReader/BinaryWriter — пара потоковых классов, которые содержат методы для чтения и записи каждого из типов-значений: ReadChar (), Write-