Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Библиотека fstream – работа с файламиСодержание книги
Поиск на нашем сайте
Рассмотренные в главе 1 п.9 классы потокового ввода istream и вывода ostream входят в иерархию классов, показанную на рисунке ниже. В библиотеке fstream имеется 3 класса для работы с файлами: ifstream – потоковый ввод из файла, данные только последовательно читаются, для чтения можно использовать операцию >>; ofstream – потоковый вывод в файл, данные только последовательно записываются, для вывода можно использовать операцию <<; fstream – потоковый ввод-вывод в файл, данные и читаются, и записываются в конец файла, используются операции >>, << соответственно. В каждом из этих классов имеются конструкторы с аргументом char * для того, чтобы связать поток с конкретным файлом и разрешить работу с ним. Кроме конструктора связать файл с потоком можно функцией класса open() – открыть файл. Она перегружена в любом из этих классов. Функция close() закрывает файлы: формирует признак конца файла EOF (End Of File) для выходных файлов и запрещает потоку работать с ними.
Рассмотрим на примере работу с файлами. Пример. Пусть имеется файл целых чисел с именем “f1.dat”. Читая числа из файла, положительные перепишем в файл с именем “f2.dat”.
#include <fstream.h> void main() {ifstream f(“f1.dat”); // конструктор с аргументом char * связывает файл с именем “f1.dat” с потоком ввода f // или можно так: ifstream f; f.open(“f1.dat”); ofstream g(“f2.dat”); // конструктор с аргументом char * связывает поток вывода g с файлом “f2.dat”. // Если такой файл уже был, то он будет разрушен. int x; while (f >> x) // прочитать число из файла “f1.dat” и записать его в x. Если все числа прочитаны, // т.е. файл закончился, то операция возвращает 0 (NULL) if (x > 0) g << x << ’ ‘; // записать число x > 0 в файл “f2.dat” f.close(); g.close(); // файлы закрыты, больше их использовать нельзя! }
Проверку на конец файла можно делать и специальной функцией-предикатом eof(). Она возвращает истину, если файл закончился, и ложь, если нет. Используя функцию eof(), цикл можно организовать таким образом:
while (!f.eof()) {... }
По умолчанию файлы считаются текстовыми, т.е. если это числа, то они преобразуются в символьный вид при выводе и из символьного в числовой при вводе. Конструкторы этих классов, а также функция open(), могут иметь дополнительный второй аргумент, конкретизирующий способ работы с файлом (атрибут). Атрибут задается как перечислимый тип (enum), определенный в базовом классе ios.
Перечислим несколько часто используемых атрибутов: ios::in – открыть файл для ввода (для объектов ifstream по умолчанию), ios::out – открыть файл для вывода (для объектов ofstream по умолчанию), ios::app – открыть файл для записи в конец файла, если файла еще нет – создается, ios::binary – открыть файл как двоичный, то есть не выполняется преобразование в символьную форму (удобен для вывода структур). Если для файла надо задать несколько атрибутов, то они связываются операцией логическое «или» (|), которая трактуется как объединение атрибутов. Например, открыть двоичный файл для дополнения можно так:
ofstream f(“ff.dat”, ios::app | ios::binary);
Приведем еще примеры работы с файлами:
void main() {int i; ofstream f; f.open("f4.dat"); // для дополнения ios::app); или ofstream f("f4.dat"); for (i = 0; i < 20; i++) f << random(100) << ' '; f.close(); ofstream g[3] = {"g1.dat", "g2.dat", "g3.dat"}; // 3 файла для вывода g[0] << 555 << ' '; g[1] << "666 + 777"; g[2] << 45.78; for(i = 0; i < 3; i++) g[i].close(); // закрыли ofstream *t = new ofstream [2]; // массив из 2-х потоковых файлов вывода, но связи с реальным файлом нет t[0].open("ah.dat"); // связать с t[1].open("oh.dat"); // конкретными файлами t[0] << "Ах!"; //запись строки в файл t[1] << "Ох!"; t[0].close(); t[1].close(); // закрыли файлы ifstream r("ah.dat"); // открыли поток r для чтения char s[15]; f.open("plus.txt"); // открыли для записи выходной поток f, используется повторно r >> s; f << s; // чтение строки до ' ' из потока r и запись в поток f // r.getline(s,30); //чтение всей строки cout << s; r.close(); // закрыли работу с файлом "ah.dat" r.open("oh.dat"); // открыли повторно входной поток r для чтения из файла "oh.dat" r >> s; f << s; // прочитали строку из файла "oh.dat" и записали ее в файл "plus.txt" f.close(); r.close(); // закрыли оба файла ifstream *ff = new ifstream("plus.txt"); // открыли поток ввода в динамической памяти для // чтения из файла “plus.txt” (*ff) >> s; // прочитали из него строку cout << "s = " << s; // вывели на экран ff –> close(); // закрыли fstream z("plus.txt", ios::in | ios::out);// открыли поток ввода-вывода z >> s; cout << s; // прочитали из него строку
z << "Ух!"; // записали в конец его новую строку z.close(); // закрыли файл “plus.txt” z.open("plus.txt", ios::in); // и открыли его только для чтения z >> s; // прочитали строку cout << endl << s; // и вывели на экран z.close(); // закрыли delete [t]; delete ff; }
|
||||||
Последнее изменение этой страницы: 2021-12-07; просмотров: 116; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.17.165.196 (0.009 с.) |