ज्ञानकोश

C# का उपयोग करके फ़ाइलों को ज़िप या अनज़िप करें - फ़ाइल संपीड़न और डिकम्प्रेशन

ZIP क्या है (फ़ाइल फ़ॉर्मेट)

ZIP एक आर्काइव फ़ाइल फ़ॉर्मेट है जो लॉसलैस डेटा संपीड़न का समर्थन करता है। एक ZIP फ़ाइल में एक या अधिक फ़ाइलें या डायरेक्टरीज़ हो सकती हैं जिन्हें संपीड़ित किया गया हो। ZIP फ़ाइलें सामान्यतः .zip या .ZIP एक्सटेंशन और MIME मीडिया टाइप application/zip का उपयोग करती हैं। कई प्रोग्राम ZIP को बेस फ़ाइल फ़ॉर्मेट के रूप में उपयोग करते हैं, अक्सर अलग नाम से। जब उपयोगकर्ता इंटरफ़ेस के माध्यम से फ़ाइल सिस्टम नेविगेट किया जाता है, तो ZIP फ़ाइलों का प्रतिनिधित्व करने वाले ग्राफ़िकल आइकन अक्सर एक दस्तावेज़ या अन्य वस्तु के रूप में दिखते हैं जिसमें ज़िपर स्पष्ट रूप से दिखता है।
फ़ाइलों को ज़िप (संपीड़ित) करने के कई तरीके हैं(फ़ाइलों को ज़िप (संपीड़ित) करने के कई तरीके ), यह आपके द्वारा उपयोग किए जाने वाले ऑपरेटिंग सिस्टम पर निर्भर करता है। और लगभग हर दिन हमें कुछ फ़ाइलों को ज़िप या अनज़िप करके उन्हें किसी स्टोरेज सर्वर या फ़ाइल‑शेयरिंग प्लेटफ़ॉर्म पर भेजना पड़ता है। सौभाग्य से, हम इस प्रक्रिया को Aspose.ZIP API का उपयोग करके स्वचालित कर सकते हैं। यह आपको फ़ाइलों को संपीड़ित और डिकम्प्रेस करने की सुविधा देता है बिना अंतर्निहित फ़ाइल संरचना की चिंता किए। यह लेख एकल तथा कई फ़ाइलों के संपीड़न के साथ काम करने का प्रदर्शन करता है।
Aspose.ZIP पैकेज को नीचे दिए गए NuGet कमांड से आपके .NET प्रोजेक्ट में जोड़ा जा सकता है:

PM> Install-Package Aspose.Zip

C# के साथ एकल फ़ाइल को संपीड़ित कैसे करें

  1. सबसे पहले हमें आउटपुट ZIP आर्काइव के लिए एक FileStream क्लास का ऑब्जेक्ट बनाना होगा।
  2. एकल फ़ाइल को FileStream ऑब्जेक्ट में लोड करें।
  3. Archive क्लास का एक ऑब्जेक्ट बनाएं।
  4. फ़ाइल को Archive.CreateEntry ( “FileName”, FileStream) मेथड का उपयोग करके आर्काइव में जोड़ें।
  5. Archive.Save (FileStream) मेथड का उपयोग करके ZIP आर्काइव बनाएं।
        using (FileStream zipFile = File.Open(dataDir + "CompressSingleFile_out.zip", FileMode.Create))
        {
            //File to be added to archive
            using (FileStream source1 = File.Open(dataDir + "alice29.txt", FileMode.Open, FileAccess.Read))
            {
                    using (var archive = new Archive(new ArchiveEntrySettings()))
                {
                    archive.CreateEntry("alice29.txt", source1);
                    archive.Save(zipFile);
                }
            }
        }

C# के साथ कई फ़ाइलों को संपीड़ित करना

एकल फ़ाइल और कई फ़ाइलों को संपीड़ित करने में अंतर यह है कि हमें अधिक फ़ाइलों को FileStream में लोड करना पड़ता है और उन्हें सभी को Archive.CreateEntry(“FileName”, FileStream) मेथड से ZIP आर्काइव में जोड़ना होता है।
निम्नलिखित कोड स्निपेट दिखाता है कि कैसे कई फ़ाइलों को FileStream का उपयोग करके ZIP में जोड़ा जाए।

        // Create FileStream for output ZIP archive
        using (FileStream zipFile = File.Open("compressed_files.zip", FileMode.Create))
        {
	        // File to be added to archive
	        using (FileStream source1 = File.Open("alice29.txt", FileMode.Open, FileAccess.Read))
	            {
		            // File to be added to archive
		            using (FileStream source2 = File.Open("asyoulike.txt", FileMode.Open, FileAccess.Read))
		        {
			        using (var archive = new Archive())
			            {
				            // Add files to the archive
				            archive.CreateEntry("alice29.txt", source1);
				            archive.CreateEntry("asyoulik3.txt", source2);
				            // ZIP the files
				            archive.Save(zipFile, new ArchiveSaveOptions() { Encoding = Encoding.ASCII, ArchiveComment = "two files are compressed in this archive" });
		            	}
		        }
	        }
        }

FileInfo क्लास का उपयोग करके फ़ाइलों को संपीड़ित करना

फ़ाइलों को FileInfo क्लास का उपयोग करके भी लोड किया जा सकता है और फिर पहले की तरह ZIP आर्काइव में जोड़ा जा सकता है।
FileInfo क्लास फ़ाइलों के निर्माण, कॉपी, डिलीशन, मूव और ओपन करने के लिए प्रॉपर्टीज़ और इंस्टेंस मेथड्स प्रदान करता है, तथा FileStream ऑब्जेक्ट्स के निर्माण में सहायता करता है।

    using (FileStream zipFile = File.Open("compressed_files.zip", FileMode.Create))
    {
	    // Files to be added to archive
	    FileInfo fi1 = new FileInfo("alice29.txt");
	    FileInfo fi2 = new FileInfo("fields.c");
	    using (var archive = new Archive())
	        {
		        // Add files to the archive
		        archive.CreateEntry("alice29.txt", fi1);
		        archive.CreateEntry("fields.c", fi2);
		        // Create ZIP archive
		        archive.Save(zipFile, new ArchiveSaveOptions() { Encoding = Encoding.ASCII });
	        }
    }

बिना संपीड़न के फ़ाइलों को आर्काइव में संग्रहीत करना

    //Creates zip archive without compressing files
    using (FileStream zipFile = File.Open(dataDir + "StoreMultipleFilesWithoutCompression_out.zip", FileMode.Create))
    {
    FileInfo fi1 = new FileInfo(dataDir + "alice29.txt");
    FileInfo fi2 = new FileInfo(dataDir + "lcet10.txt");

    using (Archive archive = new Archive(new ArchiveEntrySettings(new StoreCompressionSettings())))
    {
        archive.CreateEntry("alice29.txt", fi1);
        archive.CreateEntry("lcet10.txt", fi2);
        archive.Save(zipFile, new ArchiveSaveOptions() { Encoding = Encoding.ASCII });
    }
    }  

C# में पासवर्ड के साथ ZIP फ़ाइलें बनाना

    using (var archive = new Archive(new ArchiveEntrySettings(encryptionSettings: new TraditionalEncryptionSettings("pass"))))
    {
    archive.CreateEntry("entry_name1.dat", "input_file1.dat");
    archive.CreateEntry("entry_name2.dat", "input_file2.dat");
    archive.Save("result_archive.zip");
    }

encryptionSettings पैरामीटर का उपयोग पासवर्ड‑प्रोटेक्टेड ZIP आर्काइव बनाने के लिए किया जाता है।

C# में पासवर्ड के साथ UnZIP फ़ाइलें करना

    using (var archive = new Archive("input_archive.zip", new ArchiveLoadOptions{DecryptionPassword = "pass"}))
    {
    archive.ExtractToDirectory("\\outputDirectory");
    }

ArchiveLoadOptions में DecryptionPassword प्रॉपर्टी का मान पासवर्ड‑प्रोटेक्टेड ZIP आर्काइव को खोलने के लिए उपयोग किया जाता है।
पूर्ण उदाहरण और डेटा फ़ाइलें देखने के लिए, कृपया जाएँ https://github.com/aspose-zip/Aspose.ZIP-for-.NET .

ZIP आर्काइव में LZMA संपीड़न का उपयोग

Lempel–Ziv–Markov चेन एल्गोरिद्म (LZMA) एक ऐसा एल्गोरिद्म है जो लॉसलैस डेटा संपीड़न करता है। LZMA शब्दकोश‑आधारित संपीड़न एल्गोरिद्म का उपयोग करता है, संपीड़ित स्ट्रीम बिट्स की धारा होती है। ZIP आर्काइव में LZMA संपीड़न ZIP कंटेनरों को LZMA‑संपीड़ित एंट्रीज़ रखने की अनुमति देता है। निम्नलिखित कोड उदाहरण Aspose.ZIP API का उपयोग करके LZMA संपीड़न को लागू करता है।

using (FileStream zipFile = File.Open(dataDir + "LZMACompression_out.zip", FileMode.Create))
{
    using (Archive archive = new Archive(new ArchiveEntrySettings(new LzmaCompressionSettings())))
    {
        archive.CreateEntry("sample.txt", dataDir + "sample.txt");
        archive.Save(zipFile);
    }
}

ZIP आर्काइव में BZip2 संपीड़न का उपयोग

bzip2 एक मुफ्त और ओपन‑सोर्स फ़ाइल संपीड़न प्रोग्राम है जो Burrows–Wheeler एल्गोरिद्म का उपयोग करता है। यह केवल एकल फ़ाइलों को संपीड़ित करता है और फ़ाइल आर्काइवर नहीं है। इसे Julian Seward ने विकसित किया और Mark Wielaard तथा Micah Snyder द्वारा बनाए रखा जाता है। निम्नलिखित कोड स्निपेट Aspose.ZIP API का उपयोग करके BZip2 संपीड़न को लागू करता है।

using (FileStream zipFile = File.Open(dataDir + "Bzip2Compression_out.zip", FileMode.Create))
{
    using (Archive archive = new Archive(new ArchiveEntrySettings(new Bzip2CompressionSettings())))
    {
        archive.CreateEntry("sample.txt", dataDir + "sample.txt");
        archive.Save(zipFile);
    }
}

ZIP आर्काइव में PPMd संपीड़न का उपयोग

Partial Matching द्वारा भविष्यवाणी (PPM) एक अनुकूली सांख्यिकीय डेटा संपीड़न तकनीक है जो कॉन्टेक्स्ट मॉडलिंग और भविष्यवाणी पर आधारित है। PPM मॉडल अनकम्प्रेस्ड सिम्बॉल स्ट्रीम में पिछले सिम्बॉल्स के सेट का उपयोग करके अगले सिम्बॉल की भविष्यवाणी करते हैं। PPM एल्गोरिद्म क्लस्टर विश्लेषण में डेटा को भविष्यवाणी‑आधारित समूहों में क्लस्टर करने के लिए भी उपयोग किए जा सकते हैं। निम्नलिखित कोड स्निपेट Aspose.ZIP API का उपयोग करके PPMd संपीड़न को लागू करता है।

using (FileStream zipFile = File.Open(dataDir + "PPMdCompression_out.zip", FileMode.Create))
{
    using (Archive archive = new Archive(new ArchiveEntrySettings(new PPMdCompressionSettings())))
    {
        archive.CreateEntry("sample.txt", dataDir + "sample.txt");
        archive.Save(zipFile);
    }
}

एकल फ़ाइल के साथ आर्काइव को डिकम्प्रेस करना

using (FileStream fs = File.OpenRead(dataDir + "CompressSingleFile_out.zip"))
{
    using (Archive archive = new Archive(fs))
    {
        int percentReady = 0;
        archive.Entries[0].ExtractionProgressed += (s, e) =>
        {
            int percent = (int)((100 * e.ProceededBytes) / ((ArchiveEntry)s).UncompressedSize);
            if (percent > percentReady)
            {
                Console.WriteLine(string.Format("{0}% decompressed", percent));
                percentReady = percent;
            }
        };
        archive.Entries[0].Extract(dataDir + "alice_extracted_out.txt");
    }
}

कई फ़ाइलों के साथ आर्काइव को डिकम्प्रेस करना

using (FileStream zipFile = File.Open(dataDir + "CompressMultipleFiles_out.zip", FileMode.Open))
{
    StringBuilder sb = new StringBuilder("Entries are: ");
    int percentReady = 0;
    using (Archive archive = new Archive(zipFile,
        new ArchiveLoadOptions()
        {
            EntryListed = (s, e) => { sb.AppendFormat("{0}, ", e.Entry.Name); },
            EntryExtractionProgressed = (s, e) =>
            {
                int percent = (int)((100 * e.ProceededBytes) / ((ArchiveEntry)s).UncompressedSize);
                if (percent > percentReady)
                {
                    Console.WriteLine(string.Format("{0}% compressed", percent)); percentReady = percent;
                }
            }
        }))
    {
        Console.WriteLine(sb.ToString(0, sb.Length - 2));
        using (var extracted = File.Create(dataDir + "alice_extracted_out.txt"))
        {
            using (var decompressed = archive.Entries[0].Open())
            {
                byte[] buffer = new byte[8192];
                int bytesRead;
                while (0 < (bytesRead = decompressed.Read(buffer, 0, buffer.Length)))
                {
                    extracted.Write(buffer, 0, bytesRead);
                }
                // Read from decompressed stream to extracting file.
            }
        }
        percentReady = 0;
        archive.Entries[1].Extract(dataDir + "asyoulik_extracted_out.txt");
    }
}

बिना संपीड़न के संग्रहीत आर्काइव को निकालना

using (FileStream zipFile = File.Open(dataDir + "StoreMultipleFilesWithoutCompression_out.zip", FileMode.Open))
{
    using (Archive archive = new Archive(zipFile))
    {
        using (var extracted = File.Create(dataDir + "alice_extracted_store_out.txt"))
        {
            using (var decompressed = archive.Entries[0].Open())
            {
                byte[] buffer = new byte[8192];
                int bytesRead;
                while (0 < (bytesRead = decompressed.Read(buffer, 0, buffer.Length)))
                {
                    extracted.Write(buffer, 0, bytesRead);
                }
                // Read from decompressed stream to extracting file.
            }
        }

        using (var extracted = File.Create(dataDir + "asyoulik_extracted_store_out.txt"))
        {
            using (var decompressed = archive.Entries[1].Open())
            {
                byte[] buffer = new byte[8192];
                int bytesRead;
                while (0 < (bytesRead = decompressed.Read(buffer, 0, buffer.Length)))
                {
                    extracted.Write(buffer, 0, bytesRead);
                }
                // Read from decompressed stream to extracting file.
            }
        }
    }
}

पूर्ण उदाहरण और डेटा फ़ाइलें देखने के लिए, कृपया जाएँ https://github.com/aspose-zip/Aspose.ZIP-for-.NET .