2013-10-24 47 views
5

我想通過使用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; 
} 
//----- 

現在我的問題。 我意識到,這種方法很慢。 100MB需要47秒。 只需用console命令複製一個文件需要2-3秒。

有沒有人有想法?

+2

以下答案是你最好的選擇:http://stackoverflow.com/questions/10195343/copy-a-file-in-an-sane-safe-and-efficient-way –

回答

3

流已知非常緩慢。您可以使用操作系統提供的工具,也可以使用一些可移植的包裝器。

我會推薦boost::filesystem,因爲它計劃添加到STL(C++ 14?)中。

此處的文檔:boost::filesystem::copy_file()

-1

使用Linux - 重命名(舊名稱,新名稱);

+0

這是行不通的。如果源和目標位於不同的分區上,將會出現錯誤(無效的跨設備鏈接)。 – Korbi