Лекция 15. Основы файлового ввода-вывода
До сих пор мы писали программы, в которых ввод информации осуществлялся с клавиатуры в оперативную память компьютера, а вывод информации на монитор.
В этом случае мы имеем дело с временными данными. После того, как программа заканчивает работу, эти данные стираются.
Файлы позволяют хранить данные постоянно, когда программа получает информацию из файла, то говорят, что она читает информацию из файла, а при выводе информации в файл, говорят, что записывает информацию в файл.
Существуют различные способы считывания информации из файла. Мы пока рассмотрим, как из файла прочитать всю информацию от начала и до конца.
Для того, чтобы прочитать информацию из файла или записать её в файл, необходимы специальные переменные, которые называются потоками. Они имеют специальный тип и находятся в библиотеке fstream. Для чтения из файла используются переменные (поток) – ifstream.
А для записи в файл используются переменные (поток) типа ofstream.
Чтобы в программе можно было использовать потоковую переменную её необходимо связать с соответствующим файлом на диске с помощью функции open.
В общем виде обращение к этой функции записывается так:
имя_потока.open(“полный путь”);
Если переменная потока «чтение из файла» связана с соответствующим файлом на диске, то читать информацию из файла можно используя операцию извлечения.
В общем виде:
имя_потокаt;
где t – имя переменной.
Пусть на диске D: в папке beta находится файл с именем delta.cpp и в этом файле находится массив чисел, который необходимо прочитать в программу.
Пусть числа вещественные.
…
//объявляем переменную потока чтения из файла
ifstream f;
//связываем переменную с файлом на диске
f.open(“D:\\beta\\delta.cpp”);
//объявляем переменную, с помощью которой будет читаться информация из файла
double next;
//читаем одно значение из файла
fnext;
Выводить информацию в файл можно используя операцию «вставки».
имя_потокаt;
где t – переменная, значение которой записывается в файл.
После того, как файл открыт для записи или для чтения программа определяет его по имени потока, связанного с файлом.
Таким образом, имя потока является 2-м именем файла.
Закрытие файла
После считывания/записи информации в файл его нужно закрыть. Закрывая файл мы прекращаем его связь с потоком.
Файл закрывается обращением к методу (функции) close().
В общем виде:
имя_потока.close();
Если программа завершает работу не закрыв файла, операционная система закрывает файл автоматически, но всегда следует закрывать файл.
По двум причинам:
Операционная система автоматически закрывает файл только при нормальном завершении работы программы.
Если работа программы прервана из-за ошибки, то файл может оказаться в искаженном состоянии.
В процессе решения задачи может потребоваться записать информацию в файл, а затем снова прочитать её в программе.
Для этого программа должна закрыть файл после записи в него информации, а затем открыть его для чтения, с помощью функции open.
Полиморфизм
Использование одного и того же имени для обозначения разных сущностей называется полиморфизмом.
Проверка успешности открытия файла
Обращение к функции open по некоторым причинам может закончиться неудачно. Например, при попытке чтения информации из несуществующего файла.
Проверить успешность открытия файла можно с помощью функции fail().
имя_потока.fail();
Вызов функции fail() – это логическое выражение, которое можно использовать в качестве условия с операторами while и if.
Если обращение к методу open выполнено неудачно, то функция fail() возвращает значение .
Функция exit()
В общем виде обращение к функции записывается так:
exit(целое значение)
По соглашению в качестве фактического параметра функции используется 1 (exit(1)), если обращение к функции exit выполняется при обнаружении ошибки в программе.
В остальных случаях в качестве фактического параметра берут 0.
Функция находится в библиотеке cstdlib.
Пример.
Когда идет работа с файлами имена папок и файлов должны быть написаны английскими буквами.
Пусть на диске D: в папке delta находится файл с именем sigma.cpp. в этом файле находится 5 вещественных чисел:
{-0.5 0.25 2.5 1.75 18.6}
Необходимо прочитать числа из файла и вывести их на монитор и вычислить сумму этих чисел (вывести её на монитор).
Файл с исходными данными необходимо создавать либо в приложении Блокнот, либо в Visual Studio, выбрав команду File-New-File.
Имена потоков (файлов) в качестве входной информации.
Задание. Набрать код программы в Visual Studio, скомпилировать, проверить правильность работы программы.
В онлайн компиляторе проверить работу программы не получится, потому что в коде указывается адрес файла НА ВАШЕМ КОМПЬЮТЕРЕ. Учитывайте этот момент при проверке работы программы.