2013-10-24 8 views
5

Sto provando a spostare file su linux usando C++. Il problema è che il file sorgente e la cartella di destinazione possono trovarsi in partizioni diverse. Quindi non posso semplicemente spostare i file. Ok. Ho deciso di copiare il file ed eliminare quello vecchio.Modo più rapido per spostare il file in C++ su 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; 
} 
//----- 

Ora il mio problema. Ho capito, questo metodo è molto lento. Ci vogliono 47 secondi per 100 MB. Basta copiare un file con il comando della console per 2-3 secondi.

Qualcuno ha un'idea?

+2

La seguente risposta è la soluzione migliore: http://stackoverflow.com/questions/10195343/copy-a-file-in-an-sane-safe-and-efficient-way –

risposta

3

Gli stream sono noti per essere piuttosto lenti. È possibile utilizzare gli strumenti forniti dal sistema operativo oppure utilizzare un wrapper portatile.

Vorrei raccomandare boost::filesystem, perché è previsto di essere aggiunto a STL (C++ 14?).

Documentazione: boost::filesystem::copy_file().

-1

Uso di Linux: rinominare (nome vecchio, nuovo nome);

+0

Questo non funzionerà. Si otterrà un errore (collegamento cross-device non valido), se la fonte e la destinazione si trovano su partizioni diverse. – Korbi

Problemi correlati