2011-02-10 16 views
8

मुझे फ़ाइलों को एक संग्रह में पैक करने में परेशानी हो रही है। बूस्ट डॉक्स इस विषय पर बहुत सीमित हैं और मैंने कई घंटों के लिए वेब की खोज की है, लेकिन मुझे कोई समाधान नहीं मिल रहा है।बूस्ट :: iostream zlib एकाधिक फ़ाइलों को एक संग्रह में संपीड़ित करना

क्या मैं अब तक है:

boost::filesystem::ofstream ofsArchive("some.zip"); 
boost::iostreams::filtering_ostreambuf outFilter; 
boost::iostreams::zlib_params zparam(boost::iostreams::zlib::default_compression); 

try 
{ 
    // set up the filter 
    outFilter.strict_sync(); 
    outFilter.push(boost::iostreams::zlib_compressor(zparam)); 
    outFilter.push(ofsArchive); 


    for(each object of some kind) 
    { 
     // create a binary serialized file 
     boost::filesystem::ofstream ofs(filename, std::ios_base::binary); 
     boost::archive::binary_oarchive bin_oa(ofs); 
     bin_oa << crazyObject; 

     // here's where i'm stuck. how to add multiple files to the "some.zip"? 
     boost::iostreams::copy(ofs, outputArchive); 
    } 
} 
catch(boost::iostreams::zlib_error& e){...} 

मैं कैसे ज़िप संग्रह करने के लिए फ़ाइलों जोड़ सकता हूँ? प्रदान की गई विधि स्पष्ट रूप से काम नहीं करती है, मुझे दस्तावेज़ या हेडर फाइलों में विषय पर कुछ भी नहीं मिल रहा है

उत्तर

4

zlib ज़िप फ़ाइल प्रारूप को लागू नहीं करता है, यह बस ज़िप के भीतर उपयोग किए गए स्ट्रीम संपीड़न को लागू करता है (the zlib FAQ देखें)। मेरे ज्ञान के लिए (जो मुझे चेतावनी देनी चाहिए कि आप कुल मिलाकर नहीं हैं), बूस्ट में ज़िप अभिलेखागार पढ़ने या लिखने की कार्यक्षमता शामिल नहीं है। ऐसे पुस्तकालय हैं जो कार्यक्षमता बेशक प्रदान करते हैं, उदाहरण के लिए, zziplib (नोट: साइट इस समय नीचे दिखाई दे रही है)।

संपादित करें: जाहिर है, वास्तव में, zziplib वास्तव में ज़िप फ़ाइलों को नहीं लिख सकता है, यह केवल उन्हें पढ़ सकता है। फिर भी, मुझे यकीन है कि थोड़ा गुगल प्रारूप लिखने में सक्षम लाइब्रेरी को बदल देगा।

0

मुझे पता है कि पोस्ट थोड़ा पुराना है, लेकिन मेरे जैसे लोगों के लिए जो इसे साल बाद देखते हैं। ; infoZip (पिछले संस्करण हालांकि यह 2008 में वापस तिथियाँ, वास्तव में पूर्ण और सुरक्षित हो रहा है) -
:

मुक्त librairies का एक समूह लिख सकते हैं और (बेशक सी ++ में प्रयोग करने योग्य) सी में ज़िप फ़ाइलों को पढ़ने के लिए कर रहे हैं
- libzip, हाल ही में, अंतिम संस्करण केवल दो महीने पुराना है।

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