2011-12-05 11 views
7

मेरे पास एक टैर फ़ाइल है जिसे मैं एक विशिष्ट निर्देशिका में libarchive के साथ निकालना चाहता हूं। मैं किसी भी निर्देशिका में libarchive निकालने कैसे कर सकता हूँ? फिलहाल यह हमेशा मेरे प्रोग्राम की कार्य निर्देशिका में निष्कर्ष निकालता है। मैंने this answer पर देखा लेकिन यह सब संग्रह के भीतर एक संग्रह प्रविष्टि का स्थान बदलता है, यानी यह अभी भी एक अलग उप-निर्देशिका में मेरे प्रोग्राम की कार्य निर्देशिका में निष्कर्ष निकाला जाता है।उत्तराधिकारी - निर्दिष्ट निर्देशिका में निकालें

"यह निर्भर करता है, जाहिर है, संग्रह निकाला जा रहा है पर

आमतौर

, आप, तो निर्देशिका है जहाँ आप उत्पादन जाना चाहता हूँ के लिए CHDIR होगा():।

+0

एकमात्र तरीका मैं इसे निकालने के लिए प्राप्त कर सकता हूं जहां मैं चाहता हूं कि मेरे प्रोग्राम की कार्यशील निर्देशिका को मेरे वांछित निदेशक को बदलकर y, libarchive के साथ निकालने के काम कर रहे हैं, और फिर इसे वापस बदल रहा है। हालांकि यह गंदे है – oggmonster

उत्तर

6
libarchive चर्चा बोर्ड से

विकी उदाहरण पेज में समान कोड का उपयोग करें:

A Complete Extractor Example

या untar.c नमूना कार्यक्रम में:

untar Example

बेशक

, अगर टार फ़ाइल आप निकालने रहे हैं (जैसे "c: \ someotherdirectory") दिलचस्प फ़ाइल नाम है, तो आप के रूप में आप निकालने फ़ाइल नामों के साथ खेलने के लिए की आवश्यकता होगी।

कि उदाहरण सभी उपयोग archive_read_next_header() इनपुट संग्रह अगली प्रविष्टि का वर्णन से किसी प्रविष्टि वस्तु प्राप्त करने के लिए ध्यान दें; डिस्क पर प्रविष्टि को फिर से बनाने के लिए archive_write_header() को कॉल करने से पहले आप उस प्रविष्टि विवरण को संपादित करने के लिए स्वतंत्र हैं - विशेष रूप से, आप नाम, मालिक या अनुमतियां बदल सकते हैं।

विकी में उदाहरण पेज ऊपर शायद सबसे अच्छी जगह शुरू करने के लिए है "

12

मैं इस मुद्दे को अगले रास्ता समाधान किया गया:।

const char* currentFile = archive_entry_pathname(archiveEntry); 
    const std::string fullOutputPath = destination + currentFile; 
    archive_entry_set_pathname(archiveEntry, fullOutputPath.c_str()); 
('archive_write_header' समारोह कॉल करने से पहले यह कोड डालना)

जहां destination आउटपुट पथ है। और यह काम करता है।

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