рефераты конспекты курсовые дипломные лекции шпоры

Реферат Курсовая Конспект

Произвольный доступ к элементам файлов.

Произвольный доступ к элементам файлов. - раздел Программирование, Работа с файловыми потоками в С++. Двоичные файлы. Файловый Указатель. Каждый Файл Имеет Два Связанных С Ним Зна...

Файловый указатель.

Каждый файл имеет два связанных с ним значения: указатель чтения и указатель записи, по-другому называемые файловым указателем или текущей позицией.

При последовательном доступе к элементам файлов перемещение файлового указателя происходит автоматически. Но иногда бывает нужно контролировать его состояние. Для этого используются следующие функции:

- seekg() – установить текущий указатель чтения;

- tellg() – проверить текущий указатель чтения;

- seekp() – установить текущий указатель записи;

- tellp() – проверить текущий указатель записи.

 

Организация доступа к элементам двоичных файлов.

Благодаря наличию файлового указателя, в двоичных файлах допустим произвольный доступ к их элементам, который можно реализовать с помощью перегруженных функций – элементов, унаследованных из класса istream:

istream &seekg(streampos) или

istream &seekg(streamoff, ios::seek_dir);

Типы данных streampos и streamoff эквивалентны значениям типа long, но использовать long в явном виде не рекомендуется из-за неоднозначности работы различных компиляторов. Поэтому их определяют как

typedef long sttrempos;

typedef long sttremoff;

Первая из перегруженных форм функции seekg позиционирует входной поток на заданном байте, вторая – на смещении относительно одной из трех позиций, определенных значением константы ios::seek_dir (Табл. 14.1)

Таблица 14.1

 

Константа значение описание
beg поиск от начала файла
cur поиск от текущей позиции файла
end Поиск от конца файла

 

Для позиционирования внутреннего указателя файла для выходных потоков используют перегруженные функции выходных файловых потоков, унаследованных из класса ostream:

ostream &seekp(streampos);

ostream &seekp(streamoff, ios::seek_dir);

Пример 14.4. В двоичном файле, содержащем целые числа, заменить максимальное значение файла суммой его четных элементов.

#include <fstream>

#include <iostream>

using namespace std;

# include <stdlib.h>

 

class bin_stream:public fstream

{ public:

bin_stream(const char *fn): fstream(fn, ios::out | ios::in | ios::binary) {}

void doneOurDate(const void*, int, int);

bin_stream &operator<<(int d) { doneOurDate(&d, sizeof(d),0);

return *this;

}

bin_stream &operator>>(int &d) { doneOurDate(&d, sizeof(d),1);

return *this;

}

};

int main()

{ int i, d, max, i_max, sum_even = 0;

randomize();

bin_stream bin_out("Bin.dat");

if (!bin_out) { cerr << "Unable to write to Bin.dat" << endl;

exit(1);

}

for (i = 0; i < 10; i++) { d = random(100);

bin_out << d;

if (d % 2 == 0) sum_even += d;

}

bin_out.seekp(0, ios::beg);

bin_out >> max;

i_max = 0;

for (i = 1; i < 10; i++) { bin_out >> d;

if (d > max) { max = d; i_max = i; }

}

bin_out.seekp(sizeof(int) * i_max, ios::beg);

bin_out << sum_even;

bin_out.seekp(sizeof(int) * i_max, ios::beg);

bin_out << sum_even;

bin_out.seekp(0, ios::beg);

for (i = 0; i < 10; i++) { bin_out >> d;

cout <<d <<' ';

}

bin_out.close();

return 0;

}

void bin_stream:: doneOurDate(const void *Ptr, int len, int sign)

{ if (!Ptr) return;

if (len <= 0) return;

if (sign==0) write((char*)Ptr, len);

else read((char*)Ptr, len);

}

 

– Конец работы –

Эта тема принадлежит разделу:

Работа с файловыми потоками в С++. Двоичные файлы.

На сайте allrefs.net читайте: "Работа с файловыми потоками в С++. Двоичные файлы."

Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Произвольный доступ к элементам файлов.

Что будем делать с полученным материалом:

Если этот материал оказался полезным ля Вас, Вы можете сохранить его на свою страничку в социальных сетях:

Все темы данного раздела:

Cохранение данных в двоичных файлах.
Сохранение в двоичных файлах данных стандартных типов. Для того, чтобы открыть двоичный файл, необходимо задать режим доступа ios::binary (в некоторых компиляторах С++ - ios::bin).

Требования к отчету.
Отчет должен содержать: - наименование и цель работы; - краткие теоретические сведения; - формулировку задания своего варианта; - текст программы для варианта за

Хотите получать на электронную почту самые свежие новости?
Education Insider Sample
Подпишитесь на Нашу рассылку
Наша политика приватности обеспечивает 100% безопасность и анонимность Ваших E-Mail
Реклама
Соответствующий теме материал
  • Похожее
  • Популярное
  • Облако тегов
  • Здесь
  • Временно
  • Пусто
Теги