Faster way to move file in c++ on linux

2019-06-22 12:44发布

问题:

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?

回答1:

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().



回答2:

Using Linux - rename(old name, new name);