2013-10-24 7 views
5

Ich versuche, Dateien unter Linux mit C++ zu verschieben. Das Problem ist, dass die Quelldatei und der Zielordner in verschiedenen Partitionen sein können. Also kann ich die Dateien nicht einfach verschieben. Ok. Ich beschloss, die Datei zu kopieren und die alte zu löschen.Schnellere Möglichkeit, Datei in C++ auf Linux zu verschieben

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

Jetzt mein Problem. Ich erkannte, dass diese Methode sehr langsam ist. Es dauert 47 Sekunden für 100 MB. Kopieren Sie einfach eine Datei mit dem Befehl Konsole dauert 2-3 Sekunden.

Hat jemand eine Idee?

+2

Die folgende Antwort ist Ihre beste Wette: http://stackoverflow.com/questions/10195343/copy-a-file-in-an-sane-safe-and-efficient-way –

Antwort

3

Streams sind bekanntlich ziemlich langsam. Sie können entweder die vom Betriebssystem bereitgestellten Tools verwenden oder einen tragbaren Wrapper verwenden.

Ich würde boost::filesystem empfehlen, weil es geplant ist, zu STL (C++ 14?) Hinzugefügt werden.

Dokumentation hier: boost::filesystem::copy_file().

-1

Verwenden von Linux - Umbenennen (alter Name, neuer Name);

+0

Dies wird nicht funktionieren. Sie erhalten einen Fehler (ungültige Geräteübergreifende Verbindung), wenn sich Quelle und Ziel auf verschiedenen Partitionen befinden. – Korbi