почему c++ читает файл медленнее чем python

Написал одну и ту же программу на python и c++, чтение и запись файла

На python читаю файл через .read() записываю .write()

На c++ использую ifstream fin; и ofstream fout;

ofstream fout;
ifstream fin;

fin.open("Path");
fout.open("Path", ofstream::app);

string str;
while (!fin.eof())
{
    fin >> str;
    fout << str << "\n";
}

Читаю файл построчно, подскажите как можно реализовать считывание сразу всего файла txt размером 100мб на c++, что бы я мог сразу записать содержимое в другой файл


Ответы (1 шт):

Автор решения: Harry

Зачем именно все сразу в память? Все 100 МБайт?

Впрочем, дело ваше, как хотите.

Вот, без проверок для иллюстрации принципа:

ifstream in ("orig",ios::binary);
ofstream out("dest",ios::binary);

in.seekg(0,ios::end);
size_t sz = in.tellg();
char * buf = new char[sz];
in.seekg(0);
in.read(buf,sz);
out.write(buf,sz);
delete[] buf;

Но желательно все же проверки выполнять. Надежнее как-то :)

Update

Замеры скорости копирования на моей машине дают следующий результат для файла размером в 775 МБайт:

введите сюда описание изображения

Как видите, монстрообразный буфер — это таки плохо. Можете выполнить замеры на своей машине (а главное, на своем винте :)) и найти, когда неприятности начинаются у вас...

Update

Код для копирования с конкретным размером буфера bufsize.

const int bufsize = 8192;
ifstream in ("orig",ios::binary);
ofstream out("dest",ios::binary);
char * buf = new char[bufsize];
unsigned int rd;
do {
    rd = in.read(buf,bufsize).gcount();
    out.write(buf,rd);
} while(rd == bufsize);
delete[] buf;
→ Ссылка