Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Неформатируемый ввод- вывод

Когда вы открываете файл в текстовом режиме, происходит следующее:

при вводе каждая пара символов '\r' + '\n' (возврат каретки + перевод строки) преобразуется в символ перевода строки '\n';

при выводе каждый символ перевода строки '\n' преобразуется в пару '\r' + '\n' (возврат каретки + перевод строки).

Это не всегда удобно. Если вы собираетесь использовать выводимый файл для последующего ввода в (возможно, другую) программу, лишние байты информации ни к чему. С этой целью система вводавывода предоставляет вам возможность осуществления неформатируемого ввода-вывода, то есть записи и чтения двоичной информации (иногда говорят – сырых данных). Для осуществления ввода-вывода в двоичном режиме, включите флаг ios:: binary в параметр open_mode, передаваемый конструктору потока или функции open (). Чтение двоичной информации из файла осуществляется функцией read (), которая имеет следующий прототип:

istream_type& read (char_type* s, streamsize n);

Здесь параметр s задает буфер для считывания данных, а параметр n – число читаемых символов.

Запись двоичных данных осуществляет функция-член write ():

ostream_type& write (const char_type* s, streamsize n);

Эта функция получает n символов из буфера, адрес которого задан параметром s, и вставляет их в поток вывода. Рассмотрим пример:

// peregcincout.cpp: Defines the entry point for the console application.

//

 

#include "stdafx.h"

#include <iostream>

#include <fstream>

using namespace std;

class Dot

{

int x;

int y;

public:

 

int GetX(){return x;}

void SetX(int _x){x=_x;}

Dot(int _x,int _y){x=_x;y=_y;}

friend ostream & operator<<(ostream &out, Dot &d);

friend istream & operator>>(istream &in, Dot &d);

};

ostream & operator<<(ostream &out, Dot &d)

{

out<<d.x<<' '<<d.y<<' ';

return out;

}

istream & operator>>(istream &in, Dot &d)

{

in>>d.x>>d.y;

return in;

}

int _tmain(int argc, _TCHAR* argv[])

{

Dot d1(9,2),d2(8,7);

int x = 255;

char S [ ] ="Testing bynary.";

ofstream ofs ("Test.dat",ios::binary); // открывает файл для вывода в двоичном режиме

if (! ofs)

{

cout << "File not open \n";

return 1;

}

ofs.write ((char*) & x, sizeof (int));

ofs.write ((char*) & S, sizeof (S));

ofs.write ((char*) & d1, sizeof (Dot));

ofs.write ((char*) & d2, sizeof (Dot));

x=33;

ofs.write ((char*) & x, sizeof (int));

ofs.write ((char*) & S, sizeof (S));

ofs.write ((char*) & d2, sizeof (Dot));

ofs.write ((char*) & d1, sizeof (Dot));

ofs.close();

ifstream ifs ("Test.dat",ios::binary); // открывает файл для ввода в двоичном режиме

if (! ifs)

{

cout << "File not open \n";

return 1;

}

while(ifs.read ((char*) & x, sizeof (int)),!ifs.eof())

{

ifs.read ((char*) & S, sizeof (S));

ifs.read ((char*) & d2, sizeof (Dot));

ifs.read ((char*) & d1, sizeof (Dot));

cout << "\n x="<< x << " s= " << S << '\n'<<"d2="<<d2<< '\n'<<"d1="<<d1;

}

system("pause");

return 0;

}

 

<== предыдущая лекция | следующая лекция ==>
Файловый ввод- вывод с использованием потоков | Трубне безпліддя
Поделиться с друзьями:


Дата добавления: 2014-01-04; Просмотров: 505; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.011 сек.