फ़ोल्डरों और फ़ाइलों को संपीड़ित / डिकंप्रेस करना

क्या किसी को सी # में फ़ाइलों और फ़ोल्डर्स को संपीड़ित या डिक्रॉप करने का एक अच्छा तरीका पता है? बड़ी फ़ाइलों को संभालना आवश्यक हो सकता है।

0
जोड़ा संपादित
विचारों: 1

8 उत्तर

यह जावा में करना बहुत आसान है, और ऊपर बताए गए अनुसार आप सी # से java.util.zip पुस्तकालयों तक पहुंच सकते हैं। संदर्भों के लिए देखें:

java.util.zip javadocs
sample code

मैंने इसे थोड़ी देर पहले फ़ोल्डर संरचना के गहरे (रिकर्सिव) ज़िप करने के लिए इस्तेमाल किया था, लेकिन मुझे नहीं लगता कि मैंने कभी भी अनजिपिंग का उपयोग किया था। अगर मैं बहुत प्रेरित हूं तो मैं उस कोड को खींच सकता हूं और बाद में इसे संपादित कर सकता हूं।

0
जोड़ा

.NET 2.0 फ्रेमवर्क नेमस्पेस System.IO.Compression GZip और Deflate एल्गोरिदम का समर्थन करता है। यहां दो विधियां हैं जो एक बाइट स्ट्रीम को संपीड़ित और डिकंप्रेस करती हैं जिन्हें आप अपनी फ़ाइल ऑब्जेक्ट से प्राप्त कर सकते हैं। आप एल्गोरिदम का उपयोग करने के लिए नीचे दिए गए तरीकों में DefaultStream के लिए GZipStream का ऑब्जेक्ट कर सकते हैं। यह अभी भी अलग-अलग एल्गोरिदम के साथ संपीड़ित फ़ाइलों को संभालने की समस्या को छोड़ देता है।

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 ओवरफ़्लो बग मिला, जिसने इसे यादृच्छिक फ़ाइलों पर असफल कर दिया जो कि मूल्यों का सही संयोजन था। निश्चित नहीं है कि यह कभी तय हो गया है, लेकिन स्मृति से मैंने ओवरफ्लो से बचने के लिए SharpZip स्रोत में int चर को long में बदल दिया है। मुझे अपने पुराने निश्चित 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
जोड़ा