Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Lect12

.pdf
Скачиваний:
7
Добавлен:
06.02.2016
Размер:
909.11 Кб
Скачать

Примерработыстекстовыми файлами

f1.close();

f2.close(); return 0;

}

Содержимоефайлов:

file_from.txt

-1 2 0 3 4 5 11 -4 22 -77 0 -1 3

file_to.txt

2 0 3 4 5 11 22 0 3

Проверкадостиженияконца файласиспользованиемфлагов

while(!(f1.rdstate() & ios::eofbit)) {

...

}

Всущности,этотвариантаналогичен while(!f1.eof()) { }, поэтомуиспользовать можнолюбой.

Работасдвоичнымипотоками

Сдвоичнымифайламиможно работать,используятежесамые классыпотоков.

Основноеотличие:приработес двоичнымфайломнельзя

пользоватьсяпереопределенными операциями<< и>>! Чтениеизапись информациидолжныпроизводиться толькоспомощьюметодовпотока.

Основныеметодычтенияи

записидлядвоичныхпотоков

// Чтение блока символов

istream& istream::read(unsigned char *buf,int len);

istream& istream::read(signed char *buf, int len);

int istream::gcount();

// Запись блока символов

ostream& ostream::write(const unsigned char *buf, int n);

ostream& ostream::write(const signed char *buf, int n);

Методыпозиционирования

// Для потоков ввода

istream& istream::seekg(long pos);

istream& istream::seekg(long off, ios::seek_dir dir);

long istream::tellg();

// Для потоков вывода

ostream& ostream::seekp(long pos);

ostream& ostream::seekp(long off, ios::seek_dir dir);

long ostream::tellp();

Направления ios:seekdir - beg, cur, end

Примерработысдвоичным файлом

Переработаемпредыдущийпример так,чтобывыходнойфайлбыл двоичным.

#include <iostream> #include <fstream>

using namespace std;

int main(int argc, char *argv[]) {

Примерработысдвоичным

файлом

ifstream f1("/home/max/file_from.txt"); if (!f1) {

cerr << "Не удалось открыть файл file_from" << endl;

return 1;

}

ofstream f2("/home/max/file_to.txt", ios::binary);

if (!f2) {

cerr << "Не удалось открыть файл file_to" << endl;

return 1;

}

Примерработысдвоичным

файлом

while(!f1.eof()) { int rdNum;

f1 >> rdNum;

if (rdNum >= 0) {

f2.write((const char *)&rdNum, sizeof(int));

}

}

f1.close();

f2.close(); return 0;

}

Результаты

file_from.txt

-1 2 0 3 4 5 11 -4 22 -77 0 -1 3

file_to.txt (открыт в шестнадцатеричном редакторе, так как является двоичным):

Двоичныефайлыиструктуры

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

#include "stdafx.h" #include <iostream> #include <fstream> using namespace std; struct student {

int nz;

char name[40]; unsigned short course; int numNeud;

};

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]