1. /C++ - лабы.doc | Лабораторная работа №1 Разработка консольного приложения в С++ Builder Постановка задачи
|
Методические указания В С++ для работы с файлами определены три класса потоков: ifstream | Файловый поток ввода (чтения) данных из файла | ofstream | Файловый поток вывода (записи) данных в файл | fstream | Файловый поток ввода и вывода данных | Объявления этих классов находятся в заголовочном файле . Основные компонентные функции классов-потоков приведены в табл. 12. Таблица 12 Компонентные функции классов-потоков Функция | Описание функции | void open(«Внешнее имя файла»[, режим]) | Открывает файл | ostream& write(const signed char*, int n)
| Выводит в выходной поток n символов из массива, на который указывает первый параметр | istream& read (const signed char*, int n)
| Читает из входного потока n символов в массив, на который указывает первый параметр | int eof(void) | Тестирует конец файла (1- конец файла) | void close(void) | Закрывает поток (файл) | ostream& seekp (смещение, точка отсчета)
| Смещает указатель записи выходного потока на заданное число байтов от точки отсчета (0-начало, 1-текщая позиция, 2-конец потока) | istream& seekg (смещение, точка отсчета)
| Смещает указатель записи входного потока на заданное число байтов от точки отсчета (0-начало, 1-текщая позиция, 2-конец потока) | long tellg() | Возвращает текущую позицию указателя чтения входного потока | long tellp() | Возвращает текущую позицию указателя записи выходного потока |
Значения параметра «режим» функции открытия файла приведены в табл. 13. Таблица 13 Режимы открытия файла Значение параметра «режим» | Описание параметра | ios::in | Задает режим открытия файла для ввода | ios::out | Задает режим открытия файла для вывода | ios::ate | Задает режим открытия файла для добавления в конец файла | ios::app | Задает режим открытия файла для добавления в конец файла | ios::trunc | Удаляет содержимое файла | ios::binary | Задает режим открытия файла в двоичном режиме |
Для обмена данными с двоичными файлами используются компонентные функции read и write, а для работы с текстовыми файлами - перегруженные операции >> и <<. На рис. 18 приведена программа, которая создает текстовый файл и записывает в него данные. Пример программы чтения записи с заданным номером из двоичного файла приведен на рис. 19.
#include #include #include struct rab { long nom; char fam[15]; char name[15]; int zar; int nal; }; void main(void) { rab r; ofstream f; // выходной поток char name[12]; // имя файла cout<<"Введите имя файла"; cin>>name; f.open(name); //открытие файла для записи if(!f) //проверка выполнения операции открытия { cout<<"Ошибка"; getch(); exit(1); } for(int i=1;i<=10;i++) //цикл ввода данных и записи в файл {cout<<"? "; cin>>r.nom>>r.fam>>r.name>>r.zar>>r.nal; f< f.close(); } Рис. 18. Создание текстового файла
#include #include #include struct rab { long nom; char fam[15]; char name[15]; int zar; int nal; }; void main(void) { rab r; int n; ifstream f; //входной поток f.open("d:\\user\\b.dat",ios::binary| ios::in); if(!f) { cout<<"Ошибка"; getch(); exit(1);} cout<<"n ? "; cin>>n; f.seekg((n-1)*sizeof(r)); // перемещение указателя на запись f.read((char*)&r,sizeof(r)); //чтение записи в структуру cout< f.close(); } Рис. 19. Чтение из двоичного файла
БИБЛИОГРАФИЧЕСКИЙ СПИСОК Вирт Н. Алгоритмы и структуры данных. – СПб.: Невский Диалект, 2001. – 352 с. Пильщиков В.Н. Сборник упражнений по языку ПАСКАЛЬ. – М.: Мир, 1989. – 160 с. Крячков А.В. и др. Программирование на С и С++. Практикум. М.: Радио и связь,1997. – 344 с. Топп У., Форд У. Структуры данных в С++. – М.: Бином, 2000. – 816 с. Щилд Г. Теория и практика С++. СПб.: BHV, 1996 – 416 с. Щилд Г. Самоучитель С++. СПб.: БХВ-Петербург, 2002 – 688 с Павловская Т.А. С/С++. Программирование на языке высокого уровня. – СПб.: Питер, 2002. – 464 с. |