Более быстрый способ переместить файл в C ++ на Linux

Я пытаюсь переместить файлы в Linux с помощью C ++.
Проблема в том, что исходный файл и папка назначения могут находиться в разных разделах. Поэтому я не могу просто переместить файлы.
Хорошо. Я решил скопировать файл и удалить старый.

//-----
bool copyFile(string source, string destination)
{
bool retval = false;
ifstream srcF (source.c_str(), fstream::binary);
ofstream destF (destination.c_str(), fstream::trunc|fstream::binary);
if(srcF.is_open() && destF.is_open()){
destF << srcF.rdbuf(); //copy files binary stream
retval = true;
}
srcF.close();
destF.close();
return retval;
}
//-----

Теперь моя проблема.
Я понял, этот метод очень медленный. Это занимает 47 секунд на 100 МБ.
Простое копирование файла с помощью консольной команды занимает 2-3 секунды.

У кого-нибудь есть идея?

5

Решение

Потоки, как известно, довольно медленные. Вы можете использовать инструменты, предоставляемые операционной системой, или переносную оболочку.

Я бы посоветовал boost::filesystemпотому что планируется добавить его в STL (C ++ 14?).

Документация здесь: повышение :: файловая система :: copy_file ().

3

Другие решения

Использование Linux — переименование (старое имя, новое имя);

-1

По вопросам рекламы [email protected]