Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курс лекцій.doc
Скачиваний:
15
Добавлен:
03.11.2018
Размер:
1.12 Mб
Скачать

12.8 Неформатований ввід-вивід

Бінарні файли

Для вiдкриття файлу в бiнарному режимi необхiдно включити прапорець binary в параметрі open_mode, який передається в конструктор чи функцiї open. В наступному прикладі файл читається в текстовому та бінарному режимах:

#include<iostream.h>

#include<fstream.h>

#include<stdlib.h>

int main(void)

{ cout<<“Введіть ім’я вхідного файла”;

char name[MAX];

cin>>name;

ifstream ifbin(fname,ios::in|ios::binary);

ifstream iftxt(fmame,ios::in);

//одночасно вiдкриває файл

//у бiнарному i текстовому режимах

if (!fbin || !iftxt)

{ cout <<"помилка";

return 0;}

int countbin=0;

do {if (ifbin.get()!=EOF)

countbin++;}

while (ifbin);

cout <<“число символів, прочитаних в режимі binary”<<countbin;

int counttxt=0;

do

{if (iftxt.get()!=EOF)

counttxt++;}

while(iftxt);

cout <<“число символів, прочитаних в режимі text”

<<counttxt;

return 0;

}

12.9 Деякі функції вводу-виводу

Функція read()

Дозволяє дiставати з потоку вказану кiлькiсть символiв та записувати їх в

буфер:

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

istream & istream::read(singed char*f,int len);

istream & istream::read(unsinged char*f.int len);

f - адреса,

len - довжина буфера.

Функція write()

Помiщує в потiк вказане число символiв:

istream & istream::write(const char*p,int len);

Приклад:

// Текстовий режим:

int i=12345;

long e=98765432;

double d=2.4 e 12;

const char bfname[]="io.bin";

const char tfname[]="io.txt";

int main(void){

ofstream ofs(fname);

if (ofs)

{ofs <<i<<'\t'

<<l<<'\t'

<<d<<'\t'<<endl;

ofs.close();}

ifstream ifs(tfname);

if(ifs)

{ifs >>i>>l>>d;

ifs.close();

}

// Бiнарний режим:

ofs.open(bname,ios::out|ios::binary);

if(ofs)

{ofs.write ((char*)& i,sizeof(i));

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

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

ofs.close();

}

ifs.open(bname,ios::in|ios::binary)

if(ifs)

{ifs.read((char*)& i,sizeof(i));

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

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

ifs.close();}

return 0;}

Функція get()

Призначена для читання символа.

istream & istream::get(char&)

Приклад (читається символ потоку):

while(cin.get(ch))

{if(ch=='#') break;}

або:

while(ch=cin.get())!='#')

{if(ch==EOF) break)}

Використовують також один з перегружених варіантів функції get:

istream& istream::get(char&);

istream& istream::get(signed char&);

istream& istream::get(unsigned char&);

int main(void)

{char ch;

cout<<“введіть число, за яким слідує #”;

while(cin.get(ch))

{if(ch=='#') break;

cout<<(char)ch; }

return 0;

}

Є ще функцiї для читання рядка get та getline:

istream & istream::get (char*p,int l,char t);

Функцiя дiстає символи з потоку доти, поки не буде знайдений обмежувач t , не буде прочитано l символiв, або не зустрiнеться кiнець файлу.

Функція getline()

istream & istream::getline(char*p, int l,char t)

Дiє аналогiчно до функцiї get. Рiзниця мiж функцiями get i getline полягає в

тому, що getline дiстає обмежувач, але не записує його в буфер.

Функція ignore()

Функцiя дiстає не бiльше n символiв з потоку, поки не зустрiнеться обмежувач (по замовчанню - EOF).

istream & istream::ignore(int n=1,int d=EOF)

Функція grount()

Повертає число символiв, якi були прочитанi останньою функцiєю неформатованого вводу.

int istream::grount();

Функція peek()

Повертає значення чергового символу, не дiстаючи його з вхiдного потоку.

int istream::peek();

Функція putback()

Повертає в потiк останнiй символ, який був прочитаний.

istream & istream::putback(charch)

Функції seekg та seekp

Можуть використовуватись для позиціонування вказівника діставання /поміщення відповідно вхідного та вихідного потоку:

istream& istream::seekg(streampos);

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

istream& ostream::seekp(streampos);

istream& ostream::seekp(streampoff,ios::seek_dir);

Функції tellg() та tellp()

Дозволяють знайти біжучу позицію відповідно вхідного та вихідногої потока:

streampos istream::tellg();

streampos istream::tellp();