Lect12
.pdfПримерработыстекстовыми файлами
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;
};