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

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

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

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

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

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

Для работы с файлами в языке 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); - файл открывается на вывод с добавлением записываемых данных в конец файла.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



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