2011-01-14 29 views
7

मैंने zlib 1.2.5 का उपयोग करना शुरू कर दिया है और मुझे ज़िप फ़ाइल से निकालने के लिए कोई रूटीन नहीं दिख रहा है? मैंने वितरण के हिस्से, एक मिनीजिप आवेदन के बारे में पढ़ा।zlib C++ और फ़ाइलों को निकालने

क्या यह ऐसा किया जाना चाहिए?

उत्तर

21

हाँ, यह ठीक है। (लेकिन अगर कभी आप सी कोड पसंद नहीं है, आप 7-ज़िप एसडीके पर गौर करना चाहिए कि C++ में कोड है और सी #।)

  • सभी कार्यों एक ज़िप संग्रह से कर रहे हैं ब्राउज़ करें और फ़ाइलों को विस्तारित करने में : zip.h

(contrib\minizip\unzip.h और contrib\minizip\zip.h को देखो) उदाहरण decompressing के लिए: unzip.h

  • सभी कार्यों एक ज़िप संग्रह को संपीड़ित और फ़ाइलों को जोड़ में हैंअपने ज़िप फ़ाइल कीunzOpen() कार्यों रिटर्न एक unzFile

    तो यह unzFile पर unzGoToFirstFile() और unzGoToNextFile() का उपयोग संग्रह में सभी फ़ाइलों के माध्यम से ब्राउज़ करने के लिए।

    तो आप अर्थात् इसके आकार के लिए unzGetCurrentFileInfo() के साथ प्रत्येक फ़ाइलों के लिए फ़ाइल जानकारी पाएं,

    निश्चित रूप से आप कुछ पल में unzOpenCurrentFile() फोन करना चाहिए।

    और फ़ाइलइन्फो से आकार का उपयोग करके unzReadCurrentFile() पर कॉल करें, संग्रहीत फ़ाइल की बाइनरी सामग्री पुनर्प्राप्त करें।

    वैकल्पिक रूप से, एक अपारदर्शी संरचना है जो आप अपने स्वयं के आई/ओ फ़ंक्शन का उपयोग करने के लिए प्रदान कर सकते हैं, लेकिन स्पष्ट रूप से फ़ाइल एक्सेस के लिए एक डिफ़ॉल्ट Win32 कार्यान्वयन है, इसलिए आप इसके बारे में चिंता भी नहीं कर सकते।

    पुनश्च: और unzCloseCurrentFile कॉल करना भूल न()

  • +1

    ठीक है, मैंने कार्यों को पाया और मैं परीक्षण के लिए मिनीजिपिप का उपयोग कर रहा हूं। मैंने 7zip के साथ एक फ़ाइल c: \ a.zip बनाया है। इसमें एक फ़ाइल है।मैं miniunzip -x c चलाता हूं: \ a.zip -d c: \ reza और unzOpen2_64 विफल रहता है। मैं इसे विंडोज़ पर चला रहा हूं। इस मामले में कोई विचार क्यों है? – reza

    +0

    ये लिंक मर चुके हैं। टिप्पणी के लिए – kberson

    +0

    @kberson thx। मैं –

    6

    से: http://www.zlib.net/zlib_faq.html#faq11: 11. zlib हैंडल। ज़िप संग्रह कर सकते हैं?

    अपने आप से नहीं, नहीं। Zlib वितरण में निर्देशिका contrib/minizip देखें।

    वहां कोई ट्यूटोरियल नहीं है लेकिन minizip zip.c स्रोत ज़्लिब का उपयोग करके ज़िप फ़ाइलों पर आईओ (इसलिए संभवतः संपीड़न और डिकंप्रेशन) के लिए बिल्कुल है।

    और अभी भी कोई ट्यूटोरियल नहीं है लेकिन http://www.winimage.com/zLibDll/minizip.html अधिक जानकारी देता है।

    2

    मैं कुछ विशेषताएं है कि मैं जरूरत जोड़ने और यह अच्छे के लिए इसका इस्तेमाल करने के लिए कर रही है minizip के चारों ओर एक आवरण का निर्माण किया है। है नवीनतम C++ 11 का उपयोग करता है और विजुअल स्टूडियो 2013 का उपयोग कर विकसित की है (पोर्टेबल होना चाहिए, लेकिन मैं यूनिक्स पर यह परीक्षण नहीं किया)

    यहाँ पूरा विवरण नहीं है: https://github.com/sebastiandev/zipper

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

    +0

    https://github.com/madler/zlib/blob/master/contrib/minizip करने के लिए अपने आवरण के साथ एक ज़िप फ़ोल्डर में आइटम को बदलने के लिए यह संभव है बात करने के लिए लिंक अपडेट किया है? मैं एक मामले में जहां मैं, एक ज़िप से एक फ़ाइल निकालने कुछ बदलाव करने और इसे वापस ज़िप करने के लिए लिखने के लिए की जरूरत है (अधिलेखन क्या वहाँ अब है) पूरे ज़िप फ़ाइल को अधिलेखित करने के बिना। ऐसा लगता है कि मैं फ़ाइल को निकालने और संशोधित करने के लिए पहले अनजिपर क्लास का उपयोग कर सकता हूं और उसके बाद जिपर क्लास में एडी फ़ंक्शन का उपयोग उसी फ़ाइल नाम के साथ ओवरराइट करने के लिए कर सकता हूं। – Wes

    +0

    मिनीज़िप में उस कार्यक्षमता नहीं है, ज़िप से भी हटाएं नहीं। मुझे लगता है कि ज़िप मानक ऐसा करने की संभावना देता है, लेकिन इसे पहले मिनीजिप पर लागू किया जाना चाहिए और बाद में इन रैपर में जोड़ा जाना चाहिए। यह ज़िप डेटा पर विशेष रूप से केंद्रित था, विशेष रूप से उन ऐप्स के आंतरिक उपयोग के लिए स्मृति में जहां सादा मिश्रण लक्ष्य था, लेकिन वास्तव में उन्मुख या ज़िप्प्स को संपादित करने और बदलने के लिए उपयोग करने का इरादा नहीं था। – Sebastian

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