ifstreaminfile (“d:\\TEST.TXT”, ios::nocreate); //открывается файл для чтения
if (infile) filecopy (infile, outfile); //вызов функции копирования
return 0;
}
voidfilecopy (ifstream & inf, ofstream & outf) //передача параметров по ссылке!!!
{char ch;
while (inf.get(ch) ) //проверка на конец файла и ввод символа
outf.put(ch); //вывод символа в файл вывода
}
Проанализируйте возможные способы реализации функции копирования:
voidfilecopy (ifstream & inf, ofstream & outf) //передача параметров по ссылке!!!
{char ch= inf.get();
while (!inf.eof() ) //проверка на конец файла и ввод символа
{ outf.put(ch); //вывод символа в файл вывода
ch=inf.get();
}
}
или такой:
voidfilecopy (ifstream & inf, ofstream & outf) //передача параметров по ссылке!!!
{char ch;
while (inf.read(&ch, 1) ) //проверка на конец файла и ввод символа
outf.write(&ch,1); //вывод символа в файл вывода
}
При использовании функций, предназначенных для работы с двоичными файлами, файлы открывают в двоичном режиме. Значение режима открытия файла ios::binary предотвращает преобразование символов.
Для считывания и записи блоков двоичных данных в С++ используются функции read() и write(), которые также являются членами потоковых классов соответственно для ввода и для вывода. Их прототипы:
istream &read (char *str, streamsize count);
ostream &write (const char *str, streamsize count);
Функция read() считывает из вызывающего потока столько байтов, сколько задано в аргументе count и передает их в буфер, определенный указателем str. Функция write() записывает в соответствующий поток из буфера, который определен указателем str, заданное в аргументе count число байтов. Значения типа streamsize представляют собой некоторую форму целого.
Если конец файла достигнут до того, как было считано count символов, выполнение функции read() просто прекращается, а в буфере оказывается столько символов, сколько их было в файле. Узнать, сколько символов было считано, можно с помощью функции-члена gcount(), имеющей прототип:
streamsize gcount();
Функция gcount() возвращает количество символов, считанных во время последней операции двоичного ввода.
В программе создается бинарный файл для вывода, в который записывается последовательность случайных чисел, и файл закрывается. Затем файл открывается уже в качестве файла для ввода, и записанная ранее информация оттуда считывается и выводится на экран:
#include <fstream.h>
#include <ctime>
#include <iostream.h>
#include <stdlib.h>
int main()
{srand((unsigned) time(NULL));
ofstream outfile ("d:/TEST.dat", ios::binary);
if(!outfile) {cout<< "error1"<< endl;
return 1;
}
int a;
for (int i=1; i<=20; i++)
{a=rand()%6;
outfile.write (reinterpret_cast<char *>(&a), sizeof(int));
}
outfile.close();
ifstream infile ("d:/TEST.dat", ios::binary| ios::nocreate);
if(!infile) {cout<< "error2"<< endl;
return 2;
}
while (infile.read (reinterpret_cast<char *>(&a), sizeof(int)))
cout << a <<' ';
cout << endl;
return 0;
}
Создаем выходной поток, открываем двоичный файл и связываем его с потоком:
#include <iostream.h>
#include <fstream.h>
int main()
{ofstream ofbin (“d:\\number.bin”, ios::binary); //открытие потока для вывода
if(!ofbin) {cout<< "error1"<< endl; //если ошибка
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.