Задание 3. Класс fstream
Каждому студенту рекомендуется выполнить хотя бы одно из упражнений 1-12 задания 4 из параграфа 1.6, использую класс fstream.
Для поддержки файлового ввода и вывода стандартная библиотека С++ содержит классы ifstream (входной файловый поток), ofstream(выходной файловый поток), fstream (двунаправленный файловый поток). Файловый потоки обеспечивают более надежный ввод/вывод, чем стандартные функции библиотеки С. Для использования файловый потоков необходимо подключить к программе заголовочный файл <fsteam.h>.
Над файловыми потоками можно выполнять следующие операции:
- создание потока (потокового объекта)
- открытие потока и связывание его с файлом
- обмен с потоком (ввод/вывод)
- закрытие файла (отсоединение от потока).
Создание потока можно осуществитьс с помощью конструктора без параметров, например
ofstream outFile;// создан выходной поток
Чтобы свзяать поток, созданный таким образом, с файлом используют метод open().
Например,
outFile.open(“1.txt”);
Метод open() может иметь следующие параметры
ios::in Открыть файл для ввода
ios::out Открыть файл для вывода
ios::ate Установить указатель на конец файла
ios::app Открыть в режиме добавления в конец файла
ios::trunc Если файл сущесвтует обрезать его до нулевой длины
ios::binary Открыть в двоичном режиме
ios::nocreate Если файл не существует, установить поток в нулевое значение
ios::noreplace Если файл существует, устновить поток в нулевое значение
Обмен данных с файлами входными и выходными потоками осуществяется также как со стандарными потоками cin и cout соотвественно – с помощью опраций чтения из потока (>>) и записи в поток (<<) и специальных методов.
Например,
char c, s[20];
inFile.get(c);// считали очередной символ в переменную с
inFile>>c;//считали очердной символ в переменную с
inFile.getline(s,sizeof(s)); // считали строку в массив s
outFile.put(c); // записали символ с
outFile<<c<<s; //записали символ с и строку s
Контролировать, достигнут ли конец файла при считывании данных из потока, позволяет метод eof(), возращающий нулевое значение, если конец файла не достигнут и ненулевое в простивном случае.
При различных ошибочных ситуациях, напрмер переполнение диска или отсутсвия файла на диске, потоковый объект утанавливается в нулевое значение. Например,
ifstream inFile(“1.txt“);
if (!inFile) cout<<"Не существет такого файла!";
Для закрытия файла (отсоединения от потока) используют метод close(). Например,
outFile.close();
Пример. Решим задачу из примера 6.4, использую класс fstream. Дан текстовый файл, строки которого содержат не более m (m<=20) символов. Считать строки и записать их в файл result.txt в порядке считывания, причем каждая строка должна быть «перевернута».
#include <fstream.h>
void main ()
{
char filename[255];
cout<<"Введите имя файла ";
cin>>filename;
ifstream inFile(filename);
/*определили входной файловй поток (для чтения) и прикрепили к нему файл с именем filename */
if (inFile) // Если файл успешно открыт
{
ofstream outFile; //определили выходной файловый поток
//(для записи)
outFile.open("result.txt"); //присоединили файл с именем
//"result.txt" к выходному потоку
char s[20];// определяем массив для хранения
//считанной строки
while(!inFile.eof()) //Цикл считывания строк
{
inFile.getline(s,sizeof(s));// Считали очередную строку
int l=strlen(s);
if (s[l-1]!='\n') outFile<<s[l-1];
for (int j=l-2; j>=0; j--) outFile<<s[j];
//цикл записи символов строки в обратном порядке
outFile<<'\n';//запись символа новой строки
}
inFile.close();
outFile.close ();
cout<<"Файл записан";
}
else cout<<"Не существет такого файла!";
}
Дата добавления: 2015-10-09; просмотров: 750;