Komprimere / dekomprimere mapper og filer

stemmer
44

Er det noen som vet om en god måte å komprimere eller dekomprimere filer og mapper i C # raskt? Håndtering av store filer kan være nødvendig.

Publisert på 01/08/2008 klokken 17:13
kilden bruker
På andre språk...                            


9 svar

stemmer
25

.Net 2.0 rammeverket navne System.IO.Compressionstøtter gzip og deflate algoritmer. Her er to metoder som komprimere og dekomprimere en byte strøm som du kan få fra din fil objekt. Du kan høyminne GZipStreamfor DefaultStreami metodene nedenfor for å bruke denne algoritmen. Dette etterlater fortsatt problemet med å håndtere filer komprimert med ulike algoritmer skjønt.

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();
}
Svarte 05/08/2008 kl. 12:04
kilden bruker

stemmer
22

Jeg har alltid brukt SharpZip Biblioteket.

Her er en link

Svarte 01/08/2008 kl. 17:30
kilden bruker

stemmer
11

Per Net 1.1 den eneste tilgjengelige metoden er å nå inn i de Java-bibliotekene.
Bruke Zip klasser i J # Class Libraries for å komprimere filer og data med C #
Ikke sikker på om dette har endret seg de siste versjonene.

Svarte 01/08/2008 kl. 17:28
kilden bruker

stemmer
9

Du kan bruke en tredje-parts bibliotek som SharpZip som Tom påpekt.

En annen måte (uten å gå tredje-parts) er å bruke Windows Shell API. Du må sette en referanse til Microsoft Shell kontroller og automatisering COM bibliotek i C # prosjekt. Gerald Gibson har et eksempel på:

http://geraldgibson.net/dnn/Home/CZipFileCompression/tabid/148/Default.aspx

Internet Archive kopi av de døde siden

Svarte 01/08/2008 kl. 18:04
kilden bruker

stemmer
8

Mitt svar ville bli lukke øynene og velge DotNetZip . Det har blitt testet av et stort fellesskap.

Svarte 17/11/2013 kl. 16:08
kilden bruker

stemmer
6

GZipStream er en virkelig god nytte å bruke.

Svarte 13/05/2012 kl. 02:01
kilden bruker

stemmer
6

Dette er veldig enkelt å gjøre i java, og som nevnt ovenfor kan du komme inn i java.util.zip biblioteker fra C #. For referanser se:

java.util.zip javadocs
eksempelkode

Jeg brukte dette for en stund siden å gjøre en dyp (rekursiv) zip av en mappestruktur, men jeg tror ikke jeg noen gang brukt unzipping. Hvis jeg er så motivert jeg kan trekke den koden ut og redigere det inn her senere.

Svarte 04/08/2008 kl. 23:52
kilden bruker

stemmer
5

Et annet godt alternativ er også DotNetZip .

Svarte 08/12/2011 kl. 22:29
kilden bruker

stemmer
0

du kan lage zip-fil med denne metoden:

public async Task<string> 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;
    }

og så kan du pakke ut zip-fil med dette metoder:
1 denne metoden arbeidet med zip-fil banen

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- denne fremgangsmåte arbeide med glidelås filstrøm

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));
    }
Svarte 09/01/2018 kl. 18:35
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more