2013-10-24 7 views
5

मैं C++ का उपयोग कर लिनक्स पर फ़ाइलों को स्थानांतरित करने का प्रयास कर रहा हूं। समस्या यह है कि स्रोत फ़ाइल और गंतव्य फ़ोल्डर विभिन्न विभाजनों में हो सकता है। तो मैं बस फ़ाइलों को स्थानांतरित नहीं कर सकता। ठीक है। मैंने फ़ाइल की प्रतिलिपि बनाने और पुराने को हटाने का फैसला किया।लिनक्स पर 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; 
} 
//----- 

अब मेरी समस्या। मुझे एहसास हुआ, यह विधि बहुत धीमी है। 100 एमबी के लिए 47 सेकंड लगते हैं। बस कंसोल कमांड के साथ एक फ़ाइल की प्रतिलिपि बनाएँ 2-3 सेकंड लेता है।

क्या किसी के पास कोई विचार है?

+2

निम्नलिखित उत्तर आपकी सबसे अच्छी शर्त है: http://stackoverflow.com/questions/10195343/copy-a-file-in-an-sane-safe-and- कुशल-way –

उत्तर

3

स्ट्रीम बहुत धीमी होने के लिए जाने जाते हैं। आप या तो ऑपरेटिंग सिस्टम द्वारा प्रदान किए गए टूल्स का उपयोग कर सकते हैं या आप कुछ पोर्टेबल रैपर का उपयोग कर सकते हैं।

मैं boost::filesystem की सिफारिश करता हूं, क्योंकि इसे एसटीएल (सी ++ 14?) में जोड़ने की योजना है।

यहां प्रलेखन: boost::filesystem::copy_file()

-1

लिनक्स का उपयोग - नाम बदलें (पुराना नाम, नया नाम);

+0

यह काम नहीं करेगा। स्रोत और गंतव्य अलग-अलग विभाजनों पर हैं, तो आपको एक त्रुटि (अमान्य क्रॉस-डिवाइस लिंक) मिलेगी। – Korbi

संबंधित मुद्दे

 संबंधित मुद्दे