logo search
Posobie_Cpp

6.2 Тонкости работы с файлами

Открывая файл на чтение, мы подразумеваем, что файл реально существует и находится в текущей папке с проектом (если мы запускаем программу из Visual Studio) или в папке с exe-файлом программы (если программа запускается вне Visual Studio).

А что произойдет, если файл по указанному пути не найден? В приведенных выше примерах, объявленные на чтение файлы будут созданы пустыми, а значения переменных, которые из него считываются – неопределенными. В результате при выполнении программы возникнет ошибка. Поможет предотвратить эту ситуацию использование функции is_open(). Функция возвращает значение TRUE, если файл был корректно открыт и FALSE в противном случае1. Вот как можно улучшить код чтения из файла, добавив проверку:

fstream fin("test.txt",ios::in);

if(!fin.is_open()) // если файл не открыт…

{

cout<<”Ошибка открытия файла”<<endl;

return; // окончание работы программы

}

Пока мы ограничивались случаями только чтения (in) или только записи (out) из/в файлы. А как быть в других случаях, например, добавления данных в конец файла? В таблице 6.1 приведены константы режимов работы с файлом.

Таблица 6.1. Константы режимов работы с файлами.

Константа

Значение

ios::in

Открыть файл для чтения

ios::out

Открыть файл для записи

ios::ate

Переместить указатель в конец файла

ios::app

Добавлять информацию к концу файла

ios::trunc

Содержимое существующего файла удаляется

ios::binary

Двоичный файл

Комбинация режимов чтения/записи создается при помощи оператора | (или):

ios::in|ios::out

Открыть файл для чтения и записи

ios::out|ios::app

Открыть файл для записи, но только для добавления

Очевидно, есть множество комбинаций режимов. Некоторые комбинации недопустимы: ios::in|ios::trunc - нельзя открыть файл для чтения, удалив его содержимое.

7. Классы в C++.