Rust में ZIP/आर्काइव के साथ कार्य: zip लाइब्रेरी और पूर्ण गाइड

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

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

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

Rust के लिए zip लाइब्रेरी: ZIP-आर्काइव के साथ कार्य करने की पूर्ण गाइड



Rust में आधुनिक विकास में आर्काइव के साथ कार्य करना एक आवश्यक कार्य है। चाहे वह लॉग को पैकेज करना हो, कॉन्फ़िगरेशन को अनज़िप करना हो या बैकअप बनाना हो — मानक zip लाइब्रेरी (crate zip) ZIP-फ़ाइलों को पढ़ने और लिखने के लिए डी-फैक्टो समाधान है। इस लेख में, हम विस्तार से समझेंगे कि लाइब्रेरी कैसे स्थापित करें, आर्काइव कैसे बनाएं, फ़ाइलें कैसे निकालें, साथ ही उन्नत तकनीकों पर भी चर्चा करेंगे: पासवर्ड, स्ट्रीम और बड़े डेटा के साथ कार्य।



स्थापना और कनेक्शन



Cargo.toml में निर्भरता जोड़ें:



[dependencies]zip = "2.1"


इसके बाद, कोड में आवश्यक मॉड्यूल आयात करें:



use std::fs::File;use std::io::{Read, Write, BufReader, BufWriter};use zip::ZipWriter;use zip::write::FileOptions;use zip::read::ZipArchive;


ZIP-आर्काइव बनाना



नया आर्काइव बनाने के लिए ZipWriter का उपयोग किया जाता है। आइए एक बुनियादी उदाहरण देखें — दो टेक्स्ट फ़ाइलों को पैकेज करें:



use std::fs::File;use std::io::Write;use zip::ZipWriter;use zip::write::FileOptions;

fn create_archive() -> 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 archive!")?;

// कंप्रेशन के साथ दूसरी फ़ाइल जोड़ें let options = FileOptions::default() .compression_method(zip::CompressionMethod::Deflated) .unix_permissions(0o755); zip.start_file("data/config.json", options)?; zip.write_all(b"{\\"version\\": 1}")?;

zip.finish()?; Ok(())}


महत्वपूर्ण: विधि start_file आर्काइव के अंदर एक नई फ़ाइल खोलती है। विकल्प आपको संपीड़न विधि सेट करने की अनुमति देते हैं (डिफ़ॉल्ट Stored — बिना संपीड़न, Deflated — मानक ZIP संपीड़न)।



आर्काइव पढ़ना और निकालना



पढ़ने के लिए ZipArchive का उपयोग किया जाता है। नीचे एक फ़ंक्शन है जो फ़ाइलों की सूची प्रदर्शित करता है और उन्हें वर्तमान निर्देशिका में निकालता है:



use std::fs::File;use std::io::{Read, BufReader};use zip::ZipArchive;

fn extract_archive() -> zip::result::ZipResult<()> { let file = File::open("example.zip")?; let reader = BufReader::new(file); let mut archive = ZipArchive::new(reader)?;

for i in 0..archive.len() { let mut entry = archive.by_index(i)?; let name = entry.name().to_string(); println!("निकाल रहे हैं: {}", name);

// डिस्क पर फ़ाइल बनाएँ let mut output = File::create(&name)?; std::io::copy(&mut entry, &mut output)?; } Ok(())}


विधि by_index प्रविष्टियों पर एक इटरेटर लौटाती है। यदि नाम से पहुँच की आवश्यकता है — by_name("path/to/file.txt") का उपयोग करें। ध्यान दें: ZIP में नामों में विभाजक / के साथ पथ हो सकते हैं — यह क्रॉस-प्लेटफ़ॉर्म के लिए सामान्य है।



पासवर्ड के साथ कार्य (एन्क्रिप्शन)



zip लाइब्रेरी AES एल्गोरिदम (डिफ़ॉल्ट AES-256) के माध्यम से पासवर्ड-आधारित एन्क्रिप्शन का समर्थन करती है। एन्क्रिप्टेड आर्काइव बनाने के लिए:



use zip::ZipWriter;use zip::write::FileOptions;use zip::AesMode;

fn create_encrypted_archive() -> zip::result::ZipResult<()> { let file = File::create("secret.zip")?; let mut zip = ZipWriter::new(file);

let options = FileOptions::default() .compression_method(zip::CompressionMethod::Deflated) .with_aes_encryption(AesMode::Aes256, "my_strong_password");

zip.start_file("secret.txt", options)?; zip.write_all(b"Top secret data")?; zip.finish()?; Ok(())}


एन्क्रिप्टेड आर्काइव पढ़ने के लिए, विधि by_index_decrypt या by_n में पासवर्ड पास करें।

अनुशंसाएँ