Студопедия  
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Cохранение данных в двоичных файлах.

Читайте также:
  1. CТРУКТУРЫ ДАННЫХ И АЛГОРИТМЫ
  2. I)Однофакторный дисперсионный анализ (выполняется с применением программы «Однофакторный дисперсионный анализ» надстройки «Анализ данных» пакета Microsoft Excel).
  3. MEDLINE - это база данных, которая содержит...
  4. Алгебраические формы представления целых знаковых двоичных чисел в компьютере и операции с этими числами
  5. Алгебраическое представление двоичных чисел
  6. Алфавит, базовые типы и описание данных.
  7. АНАЛИЗ ДАННЫХ
  8. Анализ данных и параметры хранилища загрузки
  9. Анализ данных и подготовка заключительного отчета

Сохранение в двоичных файлах данных стандартных типов.

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

Двоичные файлы более компактны и в некоторых случаях более удобны для обработки.

Для создания выходного файла создают объект

ofstream out_fil(“Outfil.dat”,ios::out | ios::binary);

if (! out_fil) { cerr<<”Error: Outfil.dat”<<endl;

exit(1);

}

Для того, чтобы открыть существующий двоичный файл для чтения, нужно создать объект

ifstream in_fil(“Infil.dat”,ois::in | ios::binary);

if (! in_fil) { cerr<<”Error: Infil.dat”<<endl;

exit(2);

}

К сожалению, созданные объекты in_fil и out_fil не слишком приспособлены для работы с двоичными файлами и требуют некоторых дополнительных действий, необходимых для корректной работы.

Пример 14.1. Запись значения типа double в двоичный файл.

# include <fstream>

# include <iostream>

using namespace std;

# include <stdlib.h>

 

class bin_outstream:public ofstream

{ public:

bin_outstream(const char *fn): ofstream(fn, ios::out | ios::binary){}

void writeOurDate(const void*, int);

ofstream &operator<<(double d) { writeOurDate(&d, sizeof(d));

return *this;

}

};

 

int main()

{ bin_outstream bin_out(“B_out.dat”);

if (! bin_out) { cerr<<”Unable to write to B_out.dat”<<endl;

exit(1);

}

double d = 5.252;

bin_out<<d;

bin_out<<d*d;

d = 5×2×E-5;

bin_out<<d;

return 0;

}

 

void bin_outstream:: writeOurDate(const void *Ptr, int len)

{ if (! Ptr) return;

if (len<=0) return;

write((char*)Ptr, len);

 

 

Пример 14.2. Чтение значений типа double из двоичного файла.

# include <fstream>

# include <iostream>

using namespace std;

# include <stdlib.h>

 

class bin_instream: public ifstream

{ public:

bin_instream(const char *fn): ifstream(fn, ios::in | ios::binary){}

void readOurDate(void*, int);

bin_instream &operator>>(double &d) { readOurDate(&d, sizeof(d));

return *this;

}

};

 

int main()

{ bin_instream bin_in(“B_in.dat”);

if (! bin_in)

{ cerr<<”Unable to open B_in.dat”<<endl;

exit(1);

}

double d;

long count = 0;

bin_in>>d;

while (! bin_in eof())

{ cout << ++count << “:’ << d << endl;

bin_in>>d;

}

return 0;

}

 

void bin_instream:: readOurDate(void *p, int len)

{ if (! p) return;

if (len <= 0) return;

read((char*)p, len);

}

 

Для работы с файловыми потоками любого из стандартных типов, нужно перегрузить операторы ввода и вывода под требуемый тип данных или воспользоваться шаблоном класса, задаваемым с помощью ключевого слова template.

 

Сохранение в двоичных файлах данных, имеющих тип, создаваемый пользователем.

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


Дата добавления: 2014-12-18; просмотров: 12 | Нарушение авторских прав




lektsii.net - Лекции.Нет - 2014-2020 год. (0.009 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав