Лабораторная работа №13
Работа с файловыми потоками в С++. Текстовые файлы.
Цель работы: получить практические навыки решения задач с использованием текстовых файлов на языке С++.
Теоретические сведения Потоковый ввод/вывод дисковых файлов.
Для работы с дисковыми файлами необходимо подключение заголовочного файла <fstream>, содержащего наборы специальных классов:
-
ifstream — для ввода,
-
ofstream — для вывода,
-
fstream — для чтения и записи данных в один и тот же файл.
Чтобы получить возможность работать с дисковым файлом, нужно открыть его с указанием режима доступа, который определяется значением константы open-mode класса ios.
Режим доступа |
Стандарт |
Действие |
app |
нет |
открывает файл для дозаписи |
ate(atend) |
да |
при открытии файла устанавливает файловый указатель на конец файла |
binary(bin) |
да |
открыть файл в двоичном представлении |
in |
да |
открыть файл для чтения (ввода) |
nocreate |
нет |
если файл не существует, то новый файл не создается |
noreplace |
нет |
если файл уже существует, файл не перезаписывается |
out |
да |
открыть файл для записи (вывода) |
trunc |
нет |
Открывает и усекает существующий файл. Новая информация замещает существующую |
Текстовые файлы.
Создание и запись.
Для создания текстового файла определяют объект класса ofstream и передают конструктору класса имя дискового файла в качестве первого параметра и режим доступа в качестве второго параметра:
ofstream out_file(“Out.txt”, ios::out);
Можно объявить константу, определяющую режим открытия файла, например:
const ois::open_mode=ois::out | ios::app;
После того, как предпринималась попытка открыть файл, следует убедиться в том, что файл открыт и готов для записи (или перезаписи):
if (! out_file) { cerr<<”Error: unable to write to out.txt”<<endl;
exit(1);
}
Все сказанное верно и для файлов, открываемых для чтения (или входных файлов):
ifstream in_file(“Input.txt”, ios::in);
if (! in_file) { cerr<<”Error: unable to open Input.txt”<<endl;
exit(1);
}
При работе с текстовыми файлами наиболее часто встречаются 4 действия:
|
|
Посимвольное чтение текста.
Функция get(), которая является методом istream, применяется для посимвольного чтения текстового файла.
Пример 13.1. Посимвольное чтение файла и вывод его на экран.
# include <fstream>
# include <iostream>
using namespace std:
int main()
{ char sym;
ifstream in_file (“Input_file.txt”, ios::in);
if (! in_file) { cerr<<”Error input file”<<endl;
exit(1);
}
while (in_file) { in_file.get(sym);
cout<<sym;
}
cout<<endl;
return 0;
}
Посимвольная запись текста.
Функция put(), которая является методом ostream, позволяет осуществлять посимвольную запись данных в текстовый файл.
Пример 13.2.
# include <fstream>
# include <iostream>
# include <string>
using namespace std:
void main()
{ string guote = “Зорко одно лишь сердце. Самого главного глазами не увидишь. А. де Сент Экзюпери”;
ofstrem out_file (“Out_file.txt”, ios::out);
if (! out_file) { cerr<<”Error output file”<<endl;
exit(1);
}
for (int i=0; i<guote.size(); i++)
out_file.put(guote[i]);
cout<<”Конец записи”<<endl;
}
Построчное чтение файла.
Обычно построчное чтение и запись файлов работают быстрее посимвольных действий. Для чтения строки из файла воспользуемся функцией getline(), которая является методом класса ifstream. Функция читает строку (в том числе и разделители), пока не встретит символ новой строки ‘\n’, помещая ее в буфер (первый аргумент функции). Максимальный размер буфера задается как второй аргумент функции.
Пример 13.3.
# include <fstream>
# include <iostream>
using namespace std:
void main()
{ const int LEN=80;
char BUF[LEN];
ifstream in_file (“Input_file.txt”, ios::in);
if (! in_file) { cerr<<”Error input file”<<endl;
exit(1);
}
while (in_file) { in_file.getline(BUF,LEN);
cout<<BUF<<endl;
}
}
Построчная запись текста.
Пример 13.4.
# include <fstream>
# include <iostream>
# include <string>
using namespace std:
void main()
{ ofstrem out_file (“Out_file.txt”, ios::out);
if (! out_file) { cerr<<”Error output file”<<endl;
exit(1);
}
out_file<<”Я не знаю, где встретиться\n”;
out_file<<”Нам придется с тобой,\n”;
out_file<<”Глобус крутится-вертится,\n”;
out_file<<”Словно шар голубой\n”;
}
Записываемые строки являются не объектами класса string, а строки типа *char, завершающиеся символом ‘\n’.