Чтобы еще раз взглянуть на "милость ОС", большая часть накладных расходов при копировании файлов лежит на операционной системе.Для фрагментированного файла потребуется больше времени для чтения, чем для дефрагментированного файла.Не существует универсальных или стандартных функций C ++ для обнаружения фрагментированных файлов.
Самый быстрый метод в C ++:
std::ifstream in_file;
std::ofstream out_file;
out_file << in_file.rdbuf();
Более подробную информацию можно найти, выполнив поиск в Интернете по ключевым словам " copy file rdbuf ".Вышеуказанный фрагмент оставляет копирование до ОС, но переносимо на все платформы.Читая в потоках ввода / вывода C ++, вы можете установить размер буфера чтения или использовать свой собственный буфер.
Более быстрое копирование файлов требует определенных функций платформы, таких как передача DMA.Использование потоков и множественной буферизации может ускорить это;но C ++ не поддерживает потоки (есть стандарт defacto, POSIX, который поддерживает потоки).Один поток будет читать в буферы, в то время как другой поток пишет из буферов.