কম্প্রেসিং / ডিম্পোরিং ফোল্ডার এবং ফাইলগুলি

কেউ দ্রুত এবং C# মধ্যে ফাইল এবং ফোল্ডার সংকোচন একটি ভাল উপায় জানেন? বড় ফাইল পরিচালনার প্রয়োজন হতে পারে।

0
যোগ সম্পাদিত
মতামত: 1

8 উত্তর

জাভাতে এটি করা খুব সহজ, এবং উপরে উল্লিখিত হিসাবে আপনি # থেকে java.util.zip লাইব্রেরিগুলিতে পৌঁছাতে পারেন। রেফারেন্সগুলি দেখুন:

java.util.zip javadocs
sample code

আমি একটি সময় আগে এটি একটি ফোল্ডার কাঠামো একটি গভীর (recursive) জিপ করতে ব্যবহৃত, কিন্তু আমি কখনও unzipping ব্যবহৃত মনে করি না। যদি আমি এতটা অভিপ্রায় করি তবে আমি সেই কোডটি খুঁজে বের করব এবং এটি পরে এখানে সম্পাদনা করব।

0
যোগ

.Net 2.0 ফ্রেমওয়ার্ক নামস্থান System.IO.Compression GZip এবং Deflate আলগোরিদিমগুলি সমর্থন করে। এখানে দুটি পদ্ধতি রয়েছে যা বাইট স্ট্রীমকে সংকুচিত করে এবং ডিকম্প্রেস করে যা আপনি আপনার ফাইল বস্তু থেকে পেতে পারেন। আপনি যে অ্যালগরিদমটি ব্যবহার করতে নিচের পদ্ধতিগুলিতে GZipStream জন্য DefaultStream সেট করতে পারেন। এই এখনও যদিও বিভিন্ন অ্যালগরিদম সঙ্গে সংকুচিত ফাইল পরিচালনার সমস্যা ছেড়ে দেয়।

public static byte[] Compress(byte[] data)
{
    MemoryStream output = new MemoryStream();

    GZipStream gzip = new GZipStream(output, CompressionMode.Compress, true);
    gzip.Write(data, 0, data.Length);
    gzip.Close();

    return output.ToArray();
}

public static byte[] Decompress(byte[] data)
{
    MemoryStream input = new MemoryStream();
    input.Write(data, 0, data.Length);
    input.Position = 0;

    GZipStream gzip = new GZipStream(input, CompressionMode.Decompress, true);

    MemoryStream output = new MemoryStream();

    byte[] buff = new byte[64];
    int read = -1;

    read = gzip.Read(buff, 0, buff.Length);

    while (read > 0)
    {
        output.Write(buff, 0, read);
        read = gzip.Read(buff, 0, buff.Length);
    }

    gzip.Close();

    return output.ToArray();
}
0
যোগ

আমি সবসময় শার্পজিপ লাইব্রেরি ব্যবহার করেছি

এখানে একটি লিঙ্ক

0
যোগ
দ্রষ্টব্য: আমি বছর আগে শার্প জিপ কোডে একটি int ওভারফ্লো বাগ খুঁজে পেয়েছি, এটি র্যান্ডম ফাইলে ব্যর্থ হয়েছে যার ফলে মানগুলির ডান সংমিশ্রণ ঘটেছে। নিশ্চিত নই যে যদি কখনও ফিক্সড হয়ে যায় তবে মেমরি থেকে আমি int ভেরিয়েবলকে দীর্ঘ এ পরিবর্তিত করেছি যাতে ঊর্ধ্বমুখী সীমা অতিক্রম করার জন্য SharpZip উৎসে। আমার পুরানো স্থায়ী শার্প জিপ কোডটি খুঁজে বের করতে চেষ্টা করতে হবে এবং তা সাম্প্রতিকতম সাথে মেলে কিনা তা পরীক্ষা করতে হবে।
যোগ লেখক Gone Coding, উৎস

আমার উত্তর আপনার চোখ বন্ধ হবে এবং DotNetZip এর জন্য নির্বাচন করুন। এটি একটি বৃহত সম্প্রদায় দ্বারা পরীক্ষা করা হয়েছে।

0
যোগ

GZipStream is a really good utility to use.

0
যোগ

As of .Net 1.1 the only available method is reaching into the java libraries.
Using the Zip Classes in the J# Class Libraries to Compress Files and Data with C#
Not sure if this has changed in recent versions.

0
যোগ

আরেকটি ভাল বিকল্প হল DotNetZip

0
যোগ

আপনি এই পদ্ধতি সহ জিপ ফাইল তৈরি করতে পারেন:

public async Task CreateZipFile(string sourceDirectoryPath, string name)
    {
        var path = HostingEnvironment.MapPath(TempPath) + name;
        await Task.Run(() =>
        {
            if (File.Exists(path)) File.Delete(path);
            ZipFile.CreateFromDirectory(sourceDirectoryPath, path);
        });
        return path;
    }

and then you can unzip zip file with this methods:
1- this method work with zip file path

public async Task ExtractZipFile(string filePath, string destinationDirectoryName)
    {
        await Task.Run(() =>
        {
            var archive = ZipFile.Open(filePath, ZipArchiveMode.Read);
            foreach (var entry in archive.Entries)
            {
                entry.ExtractToFile(Path.Combine(destinationDirectoryName, entry.FullName), true);
            }
            archive.Dispose();
        });
    }

2- এই পদ্ধতি কাজ জিপ ফাইল স্ট্রিম সঙ্গে

public async Task ExtractZipFile(Stream zipFile, string destinationDirectoryName)
    {
        string filePath = HostingEnvironment.MapPath(TempPath) + Utility.GetRandomNumber(1, int.MaxValue);
        using (FileStream output = new FileStream(filePath, FileMode.Create))
        {
            await zipFile.CopyToAsync(output);
        }
        await Task.Run(() => ZipFile.ExtractToDirectory(filePath, destinationDirectoryName));
        await Task.Run(() => File.Delete(filePath));
    }
0
যোগ