Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Создание потока, открытие и закрытие файла, связывание его с потоком






Семинар 13. Работа с файлами

Язык С++ поддерживает две системы ввода-вывода: одна, с помощью функций, унаследована из языка С, вторая, объектно-ориентированная, используется в С++. Мы рассмотрим вторую, так как она обеспечивает более надежный ввод-вывод, чем функции С.

Операции ввода-вывода выполняются в С++ через потоки. Понятие потока используется в языке для обозначения получаемых или передаваемых данных. Для работы с файловыми потоками необходимо подключить заголовочный файл < fstream>. В этом файле содержатся классы, обеспечивающие выполнение необходимых операций с файлом. В зависимости от операции мы будем использовать следующие классы: ifstream (только чтение), ofstream (только запись), fstream (чтение и запись данных в один и тот же файл).

Работа с файлом обычно предполагает выполнение следующих действий:

· создание потока (потокового объекта);

· открытие файла и связывание его с потоком;

· обмен с потоком (ввод/вывод);

· закрытие файла.

Создание потока, открытие и закрытие файла, связывание его с потоком

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

класс переменная;

класс переменная (путь_к_файлу [, режим ] );

В первом случае создается объект, не связанный с файлом. Чтобы связать объект с необходимым файлом, позже нужно вызвать метод open(), который имеет параметры, аналогичные параметрам, задаваемым во втором случае.

Второй способ позволяет сразу открыть файл и связать его с потоком. Путь к файлу указывается в первом параметре. Он задается в виде строки. Символ «\», используемый в случае полного имени файла, в этой строке нужно записывать дважды. Если путь к файлу не указывается, то подразумевается, что файл находится в текущей папке. Второй параметр задает режим открытия файла. Можно использовать следующие режимы:

ios:: in открыть файл для чтения
ios:: out открыть файл для записи; если файл существует, то его содержимое стирается
ios:: ate при открытии установить указатель на конец файла; запись будет производиться в текущую позицию курсора
ios:: app открыть в режиме добавления в конец файла
ios:: trunc если файл существует, его содержимое стирается
ios:: binary открыть в двоичном режиме

В данном случае ios – класс, который используется для указания режима доступа. Можно объединять несколько режимов операцией «|». Если параметр не указан, то используются режимы по умолчанию: для класса ifstream – ios:: in (чтение в текстовом режиме), для ofstream – ios:: out (запись в текстовом режиме; старое содержимое стирается), для fstream – ios:: in | ios:: out (чтение и запись в текстовом режиме; старое содержимое не удаляется, курсор устанавливается на начало файла).

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

// Файлы для записи

ofstream ft(" primer.txt");

ofstream fout1, fout2;

fout1.open(" test1", ios:: app);

fout2.open(" test2", ios:: binary);

// Файл для чтения

ifstream finp1(" data.txt");

ifstream f1(" D: \\Myfiles\\data.txt");

// Файл для чтения и записи

fstream myfile;

myfile.open(" mf.dat");

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

ifstream from(" D: \\data.txt"); // открываем входной файл

if (! from) cout< < " файл data.txt не найден" < < endl;

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

if (from.is_open()) cout< < " файл data.txt открыт" < < endl;

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






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.