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

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

//-----
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;
}
//-----

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

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


person Korbi    schedule 24.10.2013    source источник
comment
Лучше всего подойдет следующий ответ: файл безопасным и эффективным способом"> stackoverflow.com/questions/10195343/   -  person Diego Giagio    schedule 24.10.2013


Ответы (2)


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

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

Документация здесь: boost::filesystem::copy_file( ).

person Johny    schedule 24.10.2013

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

person HandyManDan    schedule 28.01.2015
comment
Так не пойдет. Вы получите сообщение об ошибке (Неверная ссылка между устройствами), если источник и место назначения находятся в разных разделах. - person Korbi; 29.01.2015