double arrow

Создание потока, открытие и закрытие файла


Работа с файлами

Пример работы с файлом

Общие сведения

Потоки для работы с файлами

Организация работы с файлами

Для работы с файлами в языке C++ используются потоки трех видов:

· поток ввода (класс ifstream);

· поток вывода (класс ofstream);

· поток ввода-вывода (класс fstream).

Класс ifstream используется для выполнения чтения данных из файлов. Поток ofstream –для записи данных в файлы. Поток fstream –для чтения и записи данных в файлы.

Для использования этих классов потоков необходимо в программу включить заголовочный файл <fstream>.

Для выполнения любых работ с файлом необходимо:

1) создать поток одного из классов файловых потоков;

2) связать созданный поток с конкретным файлом (открыть конкретный файл для работы);

3) выполнить необходимые действия с файлом (чтение / запись данных);

4) закрыть файл.

bool Запись_данных_в_текстовый_файл (char * FileName)

{

ofstream File;// Создали поток вывода для записи данных в файл

File.open ( FileName );// Открыли файл

if ( ! File.is_open () )// Проверили удалось ли открыть файл

{

cout << "Открыть файл не удалось! \n";




return 0;// Файл не открыт

}

for (int I = 1; I <= 10; ++ I)// Записываем 10 строк в файл

File << "Строка " << I << endl;

File.close ();// Закрываем файл

return 1;

}

bool Чтение_данных_из_текстового_файла (char * FileName)

{

ifstream File;// Создали поток ввода для чтения данных из файла

File.open ( FileName );// Открыли файл

if ( !File.is_open () )// Проверили удалось ли открыть файл

{

cout << “Открыть файл не удалось! \n” ;

return 0;// Файл не открыт

}

char S[100];

while ( ! File.eof () )// Читаем все строки из файла и выводим их на экран

{

File.getline ( S, 100 );

cout << S << endl;

}

File.close ();// Закрываем файл

return 1;

}

int main ()

{

setlocale (0, "");

if ( Запись_данных_в_текстовый_файл ( "E:\\test.txt" ) )

Чтение_данных_из_текстового_файла( "E:\\test.txt" );

system("pause");

return 0;

}

Либо последовательность из двух инструкций:

ofstream File;- создали поток

File.open ( "E:\\test.txt" ); -связали поток с файлом (открыли файл)

Либо так:

ofstream File ( "E:\\test.txt" ); -создали поток и открыли файл

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

Если файл открыть не удалось, то переменная потока (File) принимает значение false, если файл открыт – true. Следовательно, проверку успешного открытия файла можно выполнит так:

if ( ! File)

// Ошибка

Еще один способ – использовать функцию потока is_open (), которая также возвращает логическое значение в зависимости от результата операции открытия файла:

if ( ! File.is_open () )

// Ошибка

Файл закрывается с помощью функции потока close ():

File.close ();

Подробнее об открытии файла. Каждый поток использует свой вариант функции open. Их прототипы выглядят так:

void ifstream::open ( const char * FileName,



ios::openmode Mode = ios::in );

void ofstream::open ( const char * FileName,

ios::openmode Mode = ios::out | ios::trunc );

void fstream::open ( const char * FileName,

ios::openmode Mode = ios::in | ios::out );

Первый параметр определяет имя открываемого файла (представляет собой массив символов).

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

· ios::app – при открытии файла на запись (поток ofstream) обеспечивает добавление всех выводимых в файл данных в конец файла;

· ios::ate –обеспечивает начало поиска данных в файле начиная с конца файла;

· ios::in –файл открывается для чтения из него данных;

· ios::out –файл открывается для записи данных в файл;

· ios::binary –открытие файла в двоичном режиме (по умолчанию все файлы открываются в текстовом режиме);

· ios::trunc –содержимое открываемого файла уничтожается (его длина становится равной 0).

Эти флаги можно комбинировать с помощью побитовой операции ИЛИ (|).

Если файл открывается без использования функции open, эти флаги тоже можно использовать:

fstream File ( "E:\\test.txt", ios :: out | ios :: app );- файл открывается на вывод с добавлением записываемых данных в конец файла.







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