Kompresszió / dekompresszió Fájlok és mappák

szavazat
42

Tudja valaki, hogy egy jó módja annak, hogy be- illetve kicsomagolni fájlokat és mappákat a C # gyorsan? Kezelés nagy fájlokat lehet szükség.

A kérdést 01/08/2008 18:13
a forrás felhasználó
Más nyelveken...                            


9 válasz

szavazat
10

Mivel a .Net 1.1 az egyetlen lehetséges módszer benyúló java könyvtárak.
A Zip osztályok a J # Class Libraries tömöríteni a fájlokat és az adatok a C #
Nem biztos, hogy ez megváltozott az utóbbi változat.

Válaszolt 01/08/2008 18:28
a forrás felhasználó

szavazat
21

Mindig használjuk a SharpZip Könyvtár.

Itt egy link

Válaszolt 01/08/2008 18:30
a forrás felhasználó

szavazat
8

Használhatja a 3. fél könyvtár, mint SharpZip mint Tom rámutatott.

Egy másik módja (anélkül, hogy 3. fél), hogy a Windows Shell API. Meg kell adnia egy hivatkozás a Microsoft Shell Controls és Automatizálási COM könyvtár a C # projekt. Gerald Gibson van példaként:

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

Az Internet Archive példányt a halott oldal

Válaszolt 01/08/2008 19:04
a forrás felhasználó

szavazat
6

Ez nagyon könnyű csinálni java, és a fenti eljuthat a java.util.zip könyvtárak C #. Referenciaként lásd:

java.util.zip javadocs
példakód

Én ezt egy ideje, hogy csinál egy mély (rekurzív) zip mappa szerkezet, de nem hiszem, hogy valaha használt unzipping. Ha ennyire motivált Lehet húzni, hogy a kódot, és módosítsa azt ide később.

Válaszolt 05/08/2008 00:52
a forrás felhasználó

szavazat
24

A .NET 2.0 keretrendszer névtér System.IO.Compressiontámogatja GZip és Deflate algoritmusok. Íme két módszer, hogy tömörítésére és kibontására egy byte stream, amely akkor kap meg a fájl objektumot. Akkor subsitute GZipStreamszámára DefaultStreamaz alábbi módszerek használata, amely algoritmus. Ez még mindig marad a probléma kezelése tömörített fájlok különböző algoritmusok mégis.

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();
}
Válaszolt 05/08/2008 13:04
a forrás felhasználó

szavazat
5

Egy másik jó alternatíva is DotNetZip .

Válaszolt 08/12/2011 23:29
a forrás felhasználó

szavazat
6

GZipStream egy nagyon jó segédprogram használható.

Válaszolt 13/05/2012 03:01
a forrás felhasználó

szavazat
8

A válaszom lenne csukja be a szemét, és válasszák DotNetZip . Tesztelték egy nagy közösség.

Válaszolt 17/11/2013 17:08
a forrás felhasználó

szavazat
0

hozhat létre zip fájlt ezzel a módszerrel:

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;
    }

és akkor csomagolja zip fájlt ezzel a módszerek:
1- ezt a módszert, a zip fájl elérési útját

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- ezt a módszert, a zip file-patak

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));
    }
Válaszolt 09/01/2018 18:35
a forrás felhasználó

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