почему 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 шт):
Зачем именно все сразу в память? Все 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;
