C++ में ZIP/आर्काइव के साथ कार्य: libzip और zlib लाइब्रेरी

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

C++ में ZIP-आर्काइव के साथ कार्य: libzip और zlib



C++ में आधुनिक विकास में अक्सर डेटा को पैक और अनपैक करने की आवश्यकता होती है। ZIP-आर्काइव अपनी सार्वभौमिकता और संपीड़न समर्थन के कारण सबसे लोकप्रिय प्रारूपों में से एक बने हुए हैं। इस लेख में हम C++ में ZIP के साथ काम करने के लिए दो प्रमुख लाइब्रेरी देखेंगे: libzip (आर्काइव के साथ उच्च-स्तरीय कार्य) और zlib (निम्न-स्तरीय संपीड़न)। आप सीखेंगे कि लाइब्रेरी कैसे स्थापित करें, आर्काइव कैसे बनाएं, फ़ाइलें कैसे निकालें और बिना अनज़िप किए सामग्री कैसे पढ़ें।



C++ में ZIP के साथ काम करने के लिए मुख्य लाइब्रेरी

  • libzip — ZIP-आर्काइव बनाने, पढ़ने और संशोधित करने के लिए क्रॉस-प्लेटफ़ॉर्म लाइब्रेरी। एन्क्रिप्शन, स्ट्रीम और मेमोरी के साथ कार्य का समर्थन करती है।
  • zlib — डेटा संपीड़न (Deflate एल्गोरिदम) के लिए निम्न-स्तरीय लाइब्रेरी। इसका उपयोग libzip और अन्य आर्काइवर्स के आधार के रूप में किया जाता है।
  • minizip — ZIP प्रारूप के साथ काम करने के लिए zlib के ऊपर एक हल्का रैपर (अक्सर zlib के भाग के रूप में शामिल)।

अधिकांश कार्यों के लिए libzip का उपयोग करने की अनुशंसा की जाती है, क्योंकि यह अधिक सुविधाजनक और सुरक्षित API प्रदान करता है।



लाइब्रेरी की स्थापना

Linux (Ubuntu/Debian) में, पैकेज मैनेजर के माध्यम से स्थापना की जाती है:

sudo apt-get install libzip-dev zlib1g-dev

macOS (Homebrew) के लिए:

brew install libzip zlib

Windows में, आप vcpkg का उपयोग कर सकते हैं या आधिकारिक साइटों से संकलित बाइनरी फ़ाइलें डाउनलोड कर सकते हैं।

CMakeLists.txt में कनेक्शन:

find_package(ZLIB REQUIRED)find_package(LibZip REQUIRED)target_link_libraries(your_project ZLIB::ZLIB libzip::zip)


उदाहरण 1: libzip का उपयोग करके ZIP-आर्काइव बनाना

हम example.zip आर्काइव बनाएंगे और उसमें एक टेक्स्ट फ़ाइल जोड़ेंगे:

#include <zip.h>#include <iostream>#include <string>

int main() { const char* archive_name = "example.zip"; int err = 0;

// लिखने के लिए आर्काइव खोलें zip_t* archive = zip_open(archive_name, ZIP_CREATE | ZIP_TRUNCATE, &err); if (!archive) { std::cerr << "आर्काइव बनाने में त्रुटि: " << err << std::endl; return 1; }

// लिखने के लिए डेटा const char* filename = "hello.txt"; const char* content = "नमस्ते, दुनिया! Hello, C++!"; // मेमोरी से डेटा स्रोत बनाएँ zip_source_t* source = zip_source_buffer(archive, content, strlen(content), 0); if (!source) { std::cerr << "स्रोत बनाने में त्रुटि" << std::endl; zip_close(archive); return 1; }

// आर्काइव में फ़ाइल जोड़ें zip_int64_t index = zip_file_add(archive, filename, source, ZIP_FL_OVERWRITE); if (index < 0) { std::cerr << "फ़ाइल जोड़ने में त्रुटि: " << zip_strerror(archive) << std::endl; zip_source_free(source); zip_close(archive); return 1; }

// आर्काइव बंद करें zip_close(archive); std::cout << "आर्काइव बनाया गया: " << archive_name << std::endl; return 0;}


उदाहरण 2: ZIP-आर्काइव को अनज़िप करना

आर्काइव से सभी फ़ाइलों को वर्तमान निर्देशिका में निकालें:

#include <zip.h>#include <iostream>#include <fstream>

int main() { const char* archive_name = "example.zip"; int err = 0;

// पढ़ने के लिए आर्काइव खोलें zip_t* archive = zip_open(archive_name, 0, &err); if (!archive) { std::cerr << "आर्काइव खोलने में त्रुटि: " << err << std::endl; return 1; }

zip_int64_t num_entries = zip_get_num_entries(archive, 0); for (zip_int64_t i = 0; i < num_entries; ++i) { // फ़ाइल का नाम प्राप्त करें const char* filename = zip_get_name(archive, i, 0); if (!filename) continue;

// फ़ाइल खोलें

अनुशंसाएँ