fstream fio; //создание файлового потока fio для ввода-вывода
то после выполнения каждого из них файловый поток можно подсоединить к конкретному файлу с помощью компонентной функции open():
fi.open(“File.txt”, ios::in); //входной поток fi.соединен с файлом File.txt для ввода
fi.close(); //разорвана связь потока fi с файлом
fi.open(“File2.txt”); //входной поток fi.соединен с файлом File2.txt для ввода
Для проверки удачности завершения функции open() используется перегруженная операция !. Если выполнение функции open() завершилось с ошибкой, в булевом выражении поток будет равен значению false.
При обращении к конструктору с явным указанием в параметре имени файла, остальные параметры можно не указывать, они выбираются по умолчанию. Например:
ifstreamfi (“File.1”);
создается входной файловый поток с именем fi для чтения данных; разыскивается файл с названием File.1; если такой файл не существует, то он создается; если дополнительно ввести параметр ios::nocreate, то файл при его отсутствии на диске, создаваться не будет:
ifstream fi (“File.1”, ios::nocreate);
проверка успешности открытия потока:
if (!fi) {cerr <<”error File.1”; exit(1);}
ofstream fo (“File.2”);
создается выходной файловый поток с именем fo для записи данных; если файл с названием File.2 не существует, он будет создан, открыт и соединен с потоком fo; если файл уже существует, то предыдущий вариант будет удален и заново создан пустой файл; проверка:
if (!fo) {cerr <<”error File.2”; exit(1);}
После того, как файл открыт, очень легко считать из него или записать в него текстовые данные с помощью оператора << и (или) оператора >> так же, как это делалось для консольного ввода-вывода, только потоки cin и cout надо заменить тем открытым потоком, который связан с файлом. Вся информация в файле хранится в том же формате, как если бы она находилась на экране.
Как правило, файлы, которые будут обрабатываться с использованием операторов << и >>, должны иметь отформатированный текст и открывать их следует в текстовом режиме, а не в двоичном.
Для явного закрытия файла используется функция-член close() соответствующего потокового класса, не имеющая параметров и возвращаемого значения. Она чистит буфер потока, отсоединяет поток от файла и закрывает файл. При этом потоковая переменная продолжает существовать и может быть связана с другим файлом.
При завершении программы функция close() вызывается автоматически и происходит закрытие файла и закрытие потока.
При работе с файлом необходим механизм определения момента завершения работы с ним. Рассмотрим способы, позволяющие проверить это. Пусть имеем входной файловый потокinfileкласса ifstream ( ifstreaminfile;):
o аварийное состояние файлового потока можно проверить с помощью перегружаемой унарной операции «operator!», реализованной в стандартной библиотеке ввода-вывода.
Унарная операция ! может быть перегружена как функция с одним аргументом разными способами: с аргументом-объектом потокового класса когда компилятор видит выражение !infile, он генерирует вызов функции operator!: infile.operator!(), где infile – объект потокового класса; при этом функция-компонент оператор ! возвращает true, если установлен хотя бы один бит ошибки ( badbit, failbit, eofbit):
if (!infile) { //перегрузка операции ! аргументом-объектом
//ввод завершился неудачей (установлены биты ошибок)
}
} перегруженная операция >> при нормальном завершении возвращает ссылку на поток (в данном случае, infile), в противном случае, возвращается 0;
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.