mode – режим – целая статическая константа размером в 1 бит; режимы можно объединять битовой операцией ‘ | ‘:
ios::in; //открытие файла для ввода
ios::out; //открытие файла для вывода
ios:: ate //режим поиска конца файла при его открытии
//однако операции ввода-вывода возможны в любом месте файла
ios::app //режим добавления в конец файла, открытого для вывода
ios::trunс //удаление содержимого ранее существовавшего файла
ios::nocreate //не открывать новый файл //(для несуществующего файла функция выдаст ошибку)
ios::noreplace //не открывать новый файл (для существующего выходного //файла, не имеющего режимов ate или app, // функция выдаст ошибку)
ios::binary //открытие файла в двоичном режиме (по умолчанию – текстовый)
При открытии разрешается задавать следующие комбинации режимов:
out|trunс – стирание и запись (файл создается, если его нет)
out|app – дозапись (файл создается, если его нет)
in|out – чтение и запись (файл должен существовать)
in|out|trunс – стирание, чтение и запись (файл создается при его отсутствии).
Вызов функции open() осуществляется с помощью уточненного имени:
outFile.open(“C:\\USER\\RESULT.DAT”); //файл, если не существовал, будет создан, // откроется только для вывода в него данных в текстовом режиме // и будет подсоединен к потоку outFile
inFile.open(“RESULT.DAT”); //файл, если существует, откроется только для чтения //из него данных в текстовом режиме и будет подсоединен // к потоку inFile; в противном случае – ошибка ввода
ioFile.open(“RESULT.DAT”, ios::out); //файл, если не существовал, будет создан, //откроется для вывода в него данных в текстовом режиме // и будет подсоединен к потоку ioFile
Если значение параметра mode соответствует типу открываемого потока (для ввода – in, для вывода – out и т.д.), то параметр mode можно не задавать (он установится по умолчанию).
Заметим, что для потоков класса fstream, т.е. открываемых для ввода и вывода, второй аргумент должен быть задан обязательно, т.к. по умолчанию неясно, в каком направлении предполагается выполнять обмен с потоком. Для изменения направления обмена с потоком, необходимо предварительно закрыть файл с помощью функции close(), и повторно открыть его.
Хотя использовать функцию open() для открытия файла в целом правильно, часто это не делается, т.к. у классов ifstream, ofstream и fstream есть специальные функции (конструкторы), которые имеют по умолчанию те же параметры, что и функция open(), и открывают файл автоматически. Типы конструкторов для потоков разных классов очень похожи:
имя_класса (); – создает поток, не присоединяя его ни к какому файлу;
имя_класса (intfd); – создает поток и присоединяет его к уже открытому файлу, дескриптор которого используется в качестве параметра fd;
имя_класса (intfd, char *buf, int); – создает поток, присоединяя его к уже открытому файлу с дескриптором fd, и использует явно заданный буфер (buf);
имя_класса (char *fileName, intmode, int=…); – создает поток, присоединяет его к файлу с заданным именем filename, а при необходимости, предварительно создает файл с таким именем.
Чаще всего употребляют конструктор без параметров и конструктор, в котором явно указано имя файла.
Если имеем использование конструкторов без параметров:
ifstream fi; //создание входного файлового потока fi
ofstream.fo; //создание выходного файлового потока fo
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.