Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Faster way to move file in c++ on linux

I'm trying to move files on linux by using C++. The Problem is, that the source file and the destination folder can be in different partitions. So I can't simply move the files. Ok. I decided to copy the file and delete the old one.

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

Now my problem. I realized, this method is very slow. It takes 47 seconds for 100MB. Simply copy a file with the console command takes 2-3 seconds.

Does anybody have an idea?

like image 961
Korbi Avatar asked Nov 01 '22 12:11

Korbi


1 Answers

Streams are known to be pretty slow. You can either use tools provided by operating system or you can use some portable wrapper.

I would recommend boost::filesystem, because it is planned to be added to STL (C++14 ?).

Documentation here: boost::filesystem::copy_file().

like image 187
Johny Avatar answered Nov 09 '22 08:11

Johny