Работаем с потоками на C++ ofstream и ifstream. В пример показана программка генерирующая HTML файл, с данными в таблице, которые мы введем в программу. Используем потоковый ввод/вывод.
Потоки для работы с файлами создаются как объекты следующих классов:
- ofstream - для вывода (записи) данных в файл;
- ifstream - для ввода (чтения) данных из файла;
- fstream - для чтения и для записи данных (двунаправленный обмен).
Чтобы использовать эти классы, в текст программы необходимо включить дополнительный заголовочный файл fstream.h. После этого в программе можно определять конкретные файловые потоки, соответствующих типов (объекты классов ofstream, ifstream, fstream), например, таким образом:
- ofstream outFile; // Выходной файловый поток.
- ifstream inFile; // Входной файловый поток.
- fstream ioFile; // Файловый поток для ввода и вывода.
Создание файлового потока (объекта соответствующего класса) связывает имя потока с выделяемым для него буфером и инициализирует переменные состояния потока. Так как перечисленные классы файловых потоков наследуют свойства класса ios, то и переменные состояния каждого файлового потока наследуются из этого базового класса. Так как файловые классы являются производными от классов ostream (класс ofstream), istream (класс ifstream), stream (класс fstream), то они поддерживают описанный в предыдущих шагах форматированный и бесформатный обмен с файлами. Однако прежде чем выполнить обмен, необходимо открыть соответствующий файл и связать его с файловым потоком.
Открытие файла в самом общем смысле означает процедуру, информирующую систему о тех действиях, которые предполагается выполнять с файлом. Существуют функции стандартной библиотеки языка С для открытия файлов fopen(), open(). Но работая с файловыми потоками библиотеки ввода-вывода языка С++, удобнее пользоваться компонентными функциями соответствующих классов.
Создав файловый поток, можно "присоединить" его к конкретному файлу с помощью компонентной функции open(). Функция open() унаследована каждым из файловых классов ofstream, ifsream, fstream от класса fstreambase. С ее помощью можно не только открыть файл, но и связать его с уже определенным потоком. Формат функции:
#include <fstream.h>
#include <conio.h>
#include <iostream.h>
#include <fcntl.h>
#include <io.h>
char k;
char name[100];
char opisanie[100];
char god[100];
char kolvo[100];
main()
{
if ((access("index.html",2))==-1)
{
ofstream bat("index.html",ios::app);
bat<<"<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=windows-1251\">"<<endl;
bat<<"<title>[Каталог Компьютерных дисков]</title>"<<endl;
bat<<"</head><body bgcolor=\"#ffffff\"><table cellspacing=\"0\" border=\"0\" width=\"100%\">"<<endl;
bat<<"<tr><td width=\"30%\" valign=\"middle\"><font size=\"2pt\" face=\"Tahoma\"><center><b>Каталог Компьютерных дисков.</b></center></font> </td></td></tr></table><br>"<<endl;
bat<<"<table cellspacing=\"0\" cellpadding=\"3\" border=\"1\" align=\"center\" width=\"100%\" bordercolor=\"#C9C9C9\">"<<endl;
bat<<"<tr><td bgcolor=\"#e9e9e9\" align=\"center\"><font size=\"2pt\" face=\"Tahoma\"><b>Имя</b></font></td>"<<endl;
bat<<"<td bgcolor=\"#e9e9e9\" align=\"center\"><font size=\"2pt\" face=\"Tahoma\"><b>Описание</b></font></td>"<<endl;
bat<<"<td bgcolor=\"#e9e9e9\" align=\"center\"><font size=\"2pt\" face=\"Tahoma\"><b>Кол-во томов</b></font></td>"<<endl;
bat<<"<td bgcolor=\"#e9e9e9\" align=\"center\"><font size=\"2pt\" face=\"Tahoma\"><b>Год</b></font></td>"<<endl;
bat.close();
}
do
{
clrscr();
cout<<" !!! Вместо пробелов используйте \"_\" !!! "<<endl;
cout<<" Disk_List 1.0 - Програма для составлени списка дисков."<<endl;
cout<<" Вводите все по очереди, и в текущей папке создастся файл HTML."<<endl;
cout<<" Он и будет вашим списком. Его можно дописать запустив прогу."<<endl;
cout<<"\nИмя диска: ";
cin>>name;
cout<<"\nОписане диска: ";
cin>>opisanie;
cout<<"\nКоличество томов : ";
cin>>kolvo;
cout<<"\nГод выпуска: ";
cin>>god;
ofstream bat("index.html",ios::app);
bat<<"<tr><td bgcolor=\"#ffffff\" valign=\"top\"><font size=\"2pt\" face=\"Tahoma\">"<<name<<"</font></td>"<<endl;
bat<<"<td bgcolor=\"#ffffff\" valign=\"top\"><font size=\"2pt\" face=\"Tahoma\">"<<opisanie<<"</font></td>"<<endl;
bat<<"<td bgcolor=\"#ffffff\" align=\"center\" valign=\"top\"><font size=\"2pt\" face=\"Tahoma\">"<<kolvo<<"</font></td>"<<endl;
bat<<"<td bgcolor=\"#ffffff\" align=\"center\" valign=\"top\"><font size=\"2pt\" face=\"Tahoma\">" <<god<<"</font></td></tr></tr>"<<endl;
bat.close();
cout<<"\n\tВыход (для выхода Y)? [Y/N]";
cin>>k;
}
while (k!='y' || k!='Y' || k!='ф' || k!='?');
}
Написать комментарий