在Linux上用C++移动文件的更快方法

5

我正在使用C ++在Linux上移动文件。问题在于,源文件和目标文件夹可能位于不同的分区。因此,我不能简单地移动文件。好吧,我决定复制文件并删除旧文件。

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

现在我的问题是,我发现这种方法非常慢。对于100MB的文件,需要47秒才能完成。 而使用控制台命令简单地复制文件只需2-3秒钟。 有没有人有想法?

2
以下答案是您最好的选择:https://dev59.com/0eo6XIcBkEYKwwoYQiO7 - Diego Giagio
2个回答

3
流被认为是非常慢的。你可以使用操作系统提供的工具,也可以使用一些可移植的包装器。
我建议使用boost::filesystem,因为它计划添加到STL(C++14?)。
文档在这里:boost :: filesystem :: copy_file()

-1

使用Linux - rename(旧文件名, 新文件名);


如果源和目标位于不同的分区,则此方法将无法工作,并且会出现错误(无效的跨设备链接)。 - Korbi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接