|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Указатели файлов (текущая позиция). Функции для работы с указателями файловУказатели файлов У каждого файлового объекта есть два ассоциированных с ним значения, назы- Часто требуется начинать чтение файла с начала и продолжать до конца. Вычисление позиции Мы уже видели пример позиционирования указателя чтения в программе DISKFUN, Рис. 12.4. Функция seekg() с одним аргументом Вычисление сдвига Функция seekg() может использоваться в двух вариантах. Первый из них мы уже seekp(-10. ios::end); установит указатель записи за 10 байтов до конца файла. То, как это выглядит,
Рис. 12.5. Функция seekp() с двумя аргументами Вот пример, в котором используется двухаргументный вариант seekg() для Листинг 12.13. Программа SEEKG // seekg.cpp // Поиск конкретного объекта в файле #include <fstream> // для файловых потоков #include <iostream> using namespace std; /////////////////////////////////////////////////////////// class person // класс person { protected: char name[80]; // имя человека int age; // его возраст public: void getData() // получить данные о человеке { cout << "\n Введите имя: "; cin >> name; cout << " Введите возраст: "; cin >> age; } void showData(void) // вывод данных о человеке { cout << "\n Имя: " << name; cout << "\n Возраст: " << age; } }; /////////////////////////////////////////////////////////// int main() { person pers; // создать объект person ifstream infile; // создать входной файл infile.open("GROUP.DAT",ios::in|ios::binary); // открыть // файл infile.seekg(0, ios::end); // установить указатель на 0 // байт от конца файла int endposition = infile.tellg(); // найти позицию int n = endposition / sizeof(person); // число человек cout << "\nВ файле " << n << " человек(а)";
cout << "\nВведите номер персоны: "; cin >> n; int position = (n-1) * sizeof(person); // умножить размер // данных под персону на число персон infile.seekg(position); // число байт от начала // прочитать одну персону infile.read(reinterpret_cast<char*>(&pers), sizeof(pers)); pers.showData(); //вывести одну персону cout << endl; return 0; }
Результат работы программы (при предположении, что файл GROUP.DAT — В файле 3 человек(а) Имя: Артур Для удобства работы пользователя мы нумеруем объекты (персоны), начиная Функция tellg() Первое, что делает программа, это вычисляет количество человек в файле. Она
Функция tellg() возвращает текущую позицию указателя чтения. Программа В приведенном выше примере работы программы пользователь выбрал вто- Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.005 сек.) |