2009-02-03 9 views
8

मैं सी ++, बूस्ट और क्यूटी का उपयोग कर एक प्रोजेक्ट पर काम कर रहा हूं। मैं समझता हूं कि एकल फ़ाइलों और बाइटस्ट्रीम का उपयोग कैसे करें, उदाहरण के लिए, क्यूटी में qCompress() फ़ंक्शन।मैं C++ का उपयोग कर फ़ाइलों की निर्देशिका कैसे ज़िप करूं?

मैं उपनिर्देशिका समेत कई फ़ाइलों की निर्देशिका कैसे ज़िप करूं? मैं एक क्रॉस-प्लेटफार्म (मैक, विन, लिनक्स) समाधान की तलाश में हूं; मैं नई प्रक्रियाओं का एक गुच्छा आग नहीं करना पसंद करूंगा।

क्या कई फ़ाइलों से बाइटस्ट्रीम को एक ज़िपित संग्रह में गठबंधन करने का कोई मानक तरीका है, या हो सकता है कि बूस्ट iostream लाइब्रेरी में एक सुविधा फ़ंक्शन या विधि उपलब्ध हो?

सहायता के लिए बहुत धन्यवाद।

अद्यतन: क्वाज़िप लाइब्रेरी वास्तव में बहुत अच्छी लगती है। डाउनलोड पैकेज में एक उदाहरण है ("परीक्षण" डीआईआर में) जो फाइलों की निर्देशिका को ज़िपित करने के लिए बहुत स्पष्ट रूप से दिखाता है।

अपडेट 2: इस कार्य को मेरे लिनक्स निर्माण पर्यावरण पर पूरा करने के बाद, मैंने पाया कि क्वाज़िप विजुअल स्टूडियो कंपाइलर के साथ बिल्कुल काम नहीं करता है। उन सभी कंपाइलर त्रुटियों से निपटना संभव हो सकता है, लेकिन इस पथ को देखने वाले किसी को भी सावधानी बरतनी चाहिए।

उत्तर

9

मैं निम्नलिखित दो पुस्तकालयों पाया है:

  • ZipIOS++। लगता है कि "शुद्ध" सी ++ होना चाहिए। वे एक समर्थित मंच के रूप में स्पष्ट रूप से विंडोज़ सूचीबद्ध नहीं करते हैं। तो मुझे लगता है कि आपको अपनी किस्मत आजमाएं।
  • QuaZIP। क्यूटी 4 के आधार पर। वास्तव में अच्छा लग रहा है। वे स्पष्ट रूप से विंडोज़ सूचीबद्ध करते हैं (mingw का उपयोग करके)। जाहिर है, यह [इस] पुस्तकालय के लिए एक सी ++ रैपर है।

आह, और निश्चित रूप से, मैं this क्यूटी मेलिंग निर्देशिका :)

+0

मैं दूसरा क्वाज़िप। –

+0

क्वाज़िप जाने के रास्ते की तरह दिखता है। धन्यवाद! – martian

+0

ज़िपिप ++ में एमएसवीसी 6 प्रोजेक्ट फाइलें हैं। हालांकि, यह Boost.Filesystem (2001 के रूप में) से कुछ कोड उधार लेता है, जो वास्तव में कम से कम मेरे VS2008 वातावरण में बॉक्स से संकलित नहीं होता है। तो मुझे लगता है कि मुझे क्वाज़िप, या सादे zlib को भी देखना होगा ... – Reunanen

-1
system("zip myarchive.zip *"); 
+0

उन्होंने कहा कि वह नई प्रक्रियाओं को बंद नहीं करना चाहता है। – PolyThinker

+0

यह केवल एक अतिरिक्त प्रक्रिया है और यह एक तृतीय पक्ष लाइब्रेरी का उपयोग करने के बजाय लागू करने के लिए एक हेलुवा बहुत तेज़ है। लेकिन, मुझे किसी अन्य प्रक्रिया को लॉन्च नहीं करने के कारणों के बारे में पता नहीं है, शायद ओपी में बहुत सीमित स्मृति है या ज़िप पर अधिक नियंत्रण चाहता है क्योंकि यह चल रहा है लेकिन इस तरह मैं इसे करूँगा। –

+1

यह नई प्रक्रियाओं को बढ़ाने का सवाल नहीं है। यह जवाब सिर्फ सादे अज्ञानी है। क्या होगा यदि "ज़िप" स्थापित नहीं है, तो अन्य प्लेटफॉर्म के बारे में क्या यूनिक्स? –

1
+0

जहां तक ​​मुझे पता है, zlib केवल .gz फ़ाइलों का समर्थन करता है और नहीं .zip फ़ाइलें। –

+0

हाँ, मैं .zip की तलाश में हूं। Zlib.net साइट से जुड़ी मिनीजिप लाइब्रेरी मदद करने में सक्षम हो सकती है, लेकिन मुझे इसे और अधिक खोदने की जरूरत है ... अगर कोई इस पुस्तकालय के बारे में और जानता है तो मैं इसके बारे में सुनवाई की सराहना करता हूं। – martian

+0

क्या आप वास्तव में zlib के साथ पूरी निर्देशिका को संपीड़ित कर सकते हैं? या सिर्फ एक फाइलें? – Frank

1
बस रिकार्ड के लिए

की ज़िप करना/अनज़िप करने के बारे में सवाल ...

आज से उन साइटों फट है, मैं करने के लिए आवश्यक विजुअल सी ++ में कुछ बहुत समान करें। (हालांकि दूसरे प्लेटफार्म पर परियोजना को संकलित करने के संभावना बनाए रखने के लिए करना चाहता था, लेकिन वरीय सिर्फ इस उद्देश्य के लिए क्यूटी को अपनाने के लिए नहीं।)

Minizip लाइब्रेरी का उपयोग कर समाप्त हो गया। यह सादे सी में लिखा गया है, लेकिन इसके चारों ओर एक साधारण सी ++ रैपर तैयार करना एक हवा था, और अंत परिणाम मेरे उद्देश्यों के लिए कम से कम काम करता है।

0

मैंने विजुअलस्टूडियो 2010 के साथ विंडोज़ पर क्वाज़िप 0.4.3 की कोशिश की - अभी भी समस्याएं हैं लेकिन आसानी से हल किया जा सकता है। कॉन्फ़िगर और QuaZIP के लिए वी.एस. समाधान उत्पन्न करने के लिए

  1. उपयोग CMake:

    वी.एस. के साथ निर्माण करने के लिए।

  2. वीएस और निर्माण के साथ खुला सोल्यूशन - आप पहले देखेंगे कि यह 'zlib.h' नहीं ढूंढ सकता है।
  3. क्वाज़िप प्रोजेक्ट के लिए ओपन वरीयताएं और ज़ीब की क्यूटी की प्रतिलिपि सी/सी ++ में जोड़ें -> सामान्य-> अतिरिक्त निर्देशिकाएं शामिल करें: $ (QTDIR)/src/3rdparty/zlib।
  4. फिर से पुनर्निर्माण करें और आपको बहुत सी चेतावनियां मिलेंगी और एक त्रुटि C2491: QuaZipFile :: staticMetaObject पर dllimport स्थिर समस्या।
  5. ऐसा इसलिए है क्योंकि QuaZipFile को "क्लास QUAZIP_EXPORT QuaZipFile" की तरह घोषित किया गया है और QUAZIP_EXPORT को DA के लिए Q_DECL_EXPORT को हल करने और QUAZIP_BUILD को परिभाषित किया गया है या नहीं, इस पर आधारित अनुप्रयोग के लिए Q_DECL_IMPORT को हल करने की आवश्यकता है। जब क्वाज़िप QUAZIP_BUILD का निर्माण किया जाना चाहिए, लेकिन यह नहीं है - कॉन्फ़िगरेशन प्रक्रिया त्रुटि में पूरी तरह बेकार "quazip_EXPORTS" त्रुटि को परिभाषित करती है।
  6. ठीक करने के लिए, बस सभी बिल्ड कॉन्फ़िगरेशन से "quazip_EXPORTS" को हटाएं और इसके बजाय QUAZIP_BUILD जोड़ें - QuaZIP अब ठीक बनायेगा।
0

मैंने मिनीजिप के चारों ओर एक रैपर बनाया है जो मुझे चाहिए और इसे उपयोग करने के लिए इसे बेहतर बनाता है। नवीनतम सी ++ 11 का उपयोग करता है और विजुअल स्टूडियो 2013 का उपयोग करके विकसित किया गया है, इसलिए इसे आपके लिए आउट-ऑफ-द-बॉक्स काम करना चाहिए।

यहाँ पूरा विवरण दिया गया है: https://github.com/sebastiandev/zipper

आप शायद समूचे फ़ोल्डरों, ज़िप कर सकते हैं धाराओं, वैक्टर, आदि इसके अलावा एक अच्छा सुविधा पूरी तरह से स्मृति में सब कुछ कर रही है।

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

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