জ্ঞানভাণ্ডার

C# ব্যবহার করে ফাইল জিপ বা আনজিপ করা - ফাইল কম্প্রেশন এবং ডিকম্প্রেশন

ZIP (ফাইল ফরম্যাট) কী?

ZIP হল একটি আর্কাইভ ফাইল ফরম্যাট যা লসলেস ডেটা কম্প্রেশন সমর্থন করে। একটি ZIP ফাইলে এক বা একাধিক ফাইল বা ডিরেক্টরি থাকতে পারে যা কম্প্রেস করা হয়েছে। ZIP ফাইল সাধারণত .zip অথবা .ZIP ফাইল এক্সটেনশন এবং MIME মিডিয়া টাইপ application/zip ব্যবহার করে। অনেক প্রোগ্রাম ZIP-কে ভিত্তি ফাইল ফরম্যাট হিসেবে ব্যবহার করে, প্রায়শই ভিন্ন নামে। ফাইল সিস্টেমকে ইউজার ইন্টারফেসের মাধ্যমে নেভিগেট করার সময়, গ্রাফিক আইকনগুলো প্রায়শই একটি ডকুমেন্ট বা অন্য কোনো অবজেক্ট হিসেবে প্রদর্শিত হয় যার উপর জিপার চিহ্ন স্পষ্টভাবে দেখা যায়।

ফাইল জিপ (কম্প্রেস) করার ফাইল জিপ (কম্প্রেস) করার একাধিক উপায় রয়েছে, যা আপনি কোন অপারেটিং সিস্টেম ব্যবহার করছেন তার উপর নির্ভর করে। প্রায় প্রতিদিনই আমাদের কিছু ফাইল জিপ বা আনজিপ করতে হয় এবং সেগুলোকে কোনো স্টোরেজ সার্ভার বা ফাইল-শেয়ারিং প্ল্যাটফর্মে পাঠাতে হয়। সৌভাগ্যবশত, আমরা এই প্রক্রিয়াটি স্বয়ংক্রিয় করতে পারি Aspose.ZIP API ব্যবহার করে। এটি আপনাকে ফাইলের অন্তর্নিহিত গঠন নিয়ে চিন্তা না করে কম্প্রেস এবং ডিকম্প্রেস করতে দেয়। এই প্রবন্ধে একক এবং একাধিক ফাইল কম্প্রেশন উভয়ই দেখানো হয়েছে।

Aspose.ZIP প্যাকেজটি আপনার .NET প্রকল্পে নিম্নলিখিত NuGet কমান্ড ব্যবহার করে যোগ করা যায়:

PM> Install-Package Aspose.Zip

C# দিয়ে একক ফাইল কীভাবে কম্প্রেস করবেন

  1. প্রথমে আমাদের আউটপুট ZIP আর্কাইভের জন্য FileStream class এর একটি অবজেক্ট তৈরি করতে হবে
  2. একক ফাইলটি FileStream অবজেক্টে লোড করুন
  3. Archive class এর একটি অবজেক্ট তৈরি করুন
  4. Archive.CreateEntry পদ্ধতি ব্যবহার করে ফাইলটি আর্কাইভে যোগ করুন ( “FileName”, FileStream )
  5. Archive.Save পদ্ধতি ব্যবহার করে ZIP আর্কাইভ তৈরি করুন (FileStream)
        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 chain অ্যালগরিদম (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 কম্প্রেশন ব্যবহার করা

Prediction by 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.
            }
        }
    }
}