double arrow

Открытие и закрытие файлов


Для открытия файла можно использовать конструкторы ifstream, ofstream или fstream.

Форма записи:

ИмяКласса ИмяОбъекта (СтрокаПутьФайл [ , Флаг])

В качестве имени класса должен находиться любой класс, содержащий функции работы с файлами (например, ifstream или ofstream, istream или ostream , или fstream). В качестве ИмяОбъекта любой допустимый идентификатор. СтрокаПутьФайл представляет собой строку, содержащую информацию о месторасположении файла плюс его имя и расширение. При вводе имени файла с клавиатуры с указанием пути и расширения файла, если они требуются, данные вводятся в обычном виде, например: c:\1\date.txt

Если же путь, имя файла и его расширение задаются в самой программе, то надо указывать их с использованием двойной наклонной черты, т.к. одиночная наклонная черта обозначает управляющий символ и путь будет прочитан неверно, например:

fstream f(“c:\\1\\date.txt”,ios::in);

ifstream fi(“c:\\1\\file1.doc”);

ofstream fo(“file2.in”);

наличие флага необязательно. Флаг используется, если необходимо изменить режим доступа к файлу.

Флаг Назначение
ios:: in ios::out ios::ate   ios::app ios::trunc   ios::nocreate ios::noreplace ios::binary Файл открывается для чтения, его содержимое не очищается Файл открывается для записи После создания объекта маркер текущей позиции устанавливается в конец файла Все выводимые данные добавляются в конец файла Если файл существует, его содержимое очищается (автоматически устанавливается при открытии файла для записи) Объект не будет создан, если файл не существует Объект не будет создан, если файл существует Файл открывается в двоичном режиме (по умолчанию – в текстовом)

Допускается объединение флагов с помощью операции побитового ИЛИ.




Пример:

ofstream fo1(“c:\\file1.doc”, ios:: noreplace );

ofstream fо2(“file2.in”, ios::app| ios::nocreate);

В первом случае делается попытка создать объект fо1 и связать его с файлом file1.doc. Т.к. указан флаг ios:: noreplace, объект не будет создан, если файл существует, что предохраняет пользователя от нечаянного использования существующего файла для записи в него новых данных.

Во втором случае делается попытка создать объект fо2 и связать его с файлом file2.in. Т.к. указан флаг ios::nocreate, объект не будет создан, если файл не существует, а если он существует, то после создания объекта данные будут заносится в конец файла ( при этом исходные данные, хранимые в этом файле не уничтожаются).

Для обмена данными с файлом можно использовать объект класса fstream.

Например:

fstream io(“fl.dat”,ios::in|ios::app);

открывает файл для записи и чтения одновременно.

Для закрытия файлов применяется метод close, который опорожняет поток и закрывает закрепленный за потоком файл.

Пример:

#include<iostream.h>

#include<fstream.h>

void main()

{

char name[12];

cout<<”Введите имя файла”<<endl;



cin>>name;

fstream f(name,ios::in);

if(f) cout<<”Файл открыт успешно”;

f.close();

}

Для открытия файлов можно использовать функцию open.

Пример:

#include<iostream.h>

#include<fstream.h>

void main()

{

fstream f;

char name[12];

cout<<”Введите имя файла”<<endl;

cin>>name;

f.open(name,ios::in);

if(f) cout<<”Файл открыт успешно”;

f.close();

}

Параметры, требуемые функцией open, имеют тот же смысл, что и параметры конструкторов потока.

Для записи данных в файл достаточно указать вместо потока cin имя объекта, связанного с файлом.

Пример:

#include<iostream.h>

void main()

{

char name[30];

cout<<”Введите имя файла:”<<endl;

cin>>name;

fstream f;

f.open(name, ios::out|ios::ate);

f<<”Добавляем запись”;

f.close();

}







Сейчас читают про: