Rust पर आर्काइव के साथ काम करने के लिए zip लाइब्रेरी
Rust में आधुनिक डेवलपमेंट में अक्सर डेटा को ZIP-आर्काइव में पैक करने या उनसे डेटा निकालने की आवश्यकता होती है। चाहे वह बैकअप बनाना हो, सॉफ़्टवेयर वितरित करना हो या उपयोगकर्ता फ़ाइलों को प्रोसेस करना हो — zip लाइब्रेरी इस कार्य के लिए मानक समाधान है। यह ZIP-आर्काइव को पढ़ने, लिखने और संशोधित करने के लिए एक सुविधाजनक API प्रदान करती है, जो स्ट्रीमिंग प्रोसेसिंग और मेमोरी में काम करने दोनों का समर्थन करती है।
इंस्टॉलेशन और कनेक्शन
काम शुरू करने के लिए अपने Cargo.toml में डिपेंडेंसी जोड़ें:
[dependencies]zip = "2.1"डेटा स्ट्रीम के साथ काम करने के लिए std::io क्रेट की भी आवश्यकता हो सकती है, जो पहले से Rust की मानक लाइब्रेरी में शामिल है।
नया ZIP-आर्काइव बनाना
एक सरल उदाहरण देखें — एक टेक्स्ट फ़ाइल के साथ आर्काइव बनाना। इसके लिए ZipWriter का उपयोग किया जाता है, जो Write को लागू करने वाले किसी भी प्रकार को रैप करता है:
use std::fs::File;use std::io::Write;use zip::write::FileOptions;use zip::ZipWriter;
fn main() -> zip::result::ZipResult<()> { let file = File::create("example.zip")?; let mut zip = ZipWriter::new(file);
zip.start_file("hello.txt", FileOptions::default())?; zip.write_all(b"Hello, Rust ZIP!")?;
zip.finish()?; Ok(())}ध्यान दें start_file मेथड पर — यह आर्काइव के अंदर एक नई फ़ाइल लिखना शुरू करता है। आप इसे संपीड़न विकल्प, संशोधन तिथि और अन्य पैरामीटर दे सकते हैं।
फ़ाइलें पढ़ना और निकालना
आर्काइव पढ़ने के लिए ZipArchive का उपयोग किया जाता है। यह सभी प्रविष्टियों को इटरेट करने और उनकी सामग्री निकालने की अनुमति देता है:
use std::fs::File;use std::io::Read;use zip::ZipArchive;
fn main() -> zip::result::ZipResult<()> { let file = File::open("example.zip")?; let mut archive = ZipArchive::new(file)?;
for i in 0..archive.len() { let mut entry = archive.by_index(i)?; let name = entry.name().to_string(); let mut content = String::new(); entry.read_to_string(&mut content)?; println!("{}: {}", name, content); } Ok(())}by_index मेथड इंडेक्स के अनुसार एक विशिष्ट प्रविष्टि लौटाता है। by_name के माध्यम से नाम से खोज भी उपलब्ध है, लेकिन ध्यान रखें — ZIP में नाम अलग-अलग एन्कोडिंग में हो सकते हैं।
मौजूदा आर्काइव में फ़ाइलें जोड़ना
zip लाइब्रेरी पहले से बनाए गए आर्काइव में नई फ़ाइलें जोड़ने का भी समर्थन करती है। यह raw_copy_file मेथड के माध्यम से या आर्काइव को जोड़ने के मोड में खोलकर किया जाता है:
use std::fs::File;use std::io::Write;use zip::write::FileOptions;use zip::ZipWriter;
fn append_to_zip() -> zip::result::ZipResult<()> { let file = File::options() .read(true) .write(true) .open("example.zip")?; let mut zip = ZipWriter::new_append(file)?;
zip.start_file("new_file.txt", FileOptions::default())?; zip.write_all(b"Added later!")?;
zip.finish()?; Ok(())}महत्वपूर्ण: फ़ाइल जोड़ने के लिए आर्काइव को पढ़ने और लिखने की अनुमति के साथ खोला जाना चाहिए, और फ़ाइल स्वयं क्षतिग्रस्त नहीं होनी चाहिए।
विभिन्न प्रकार के संपीड़न के साथ काम
डिफ़ॉल्ट रूप से लाइब्रेरी Deflated विधि (मानक ZIP संपीड़न) का उपयोग करती है। आप इसे Stored (बिना संपीड़न) या अन्य विधियों में बदल सकते हैं, संबंधित विकल्प पास करके:
use zip::CompressionMethod;use zip::write::FileOptions;
let options = FileOptions::default() .compression_method(CompressionMethod::Stored);// याlet options = FileOptions::default() .compression_method(CompressionMethod::Deflated);यदि आपको अधिकतम संपीड़न चाहिए, तो स्तर निर्दिष्ट करें:
<