Ordner & Dateien komprimieren / dekomprimieren

9 answers
  • Der .Net 2.0-Framework-Namespace System.IO.Compression unterstützt die Algorithmen GZip und Deflate. Es gibt zwei Methoden zum Komprimieren und Dekomprimieren eines Byte-Streams, den Sie von Ihrem Dateiobjekt erhalten können. Sie können GZipStream für DefaultStream in den nachstehenden Methoden verwenden, um diesen Algorithmus zu verwenden. Das Problem der Handhabung von Dateien, die mit verschiedenen Algorithmen komprimiert wurden, bleibt jedoch bestehen.

     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();
    }
     
    04 May 2012
    mattytommoSkooz
  • Ich habe immer die SharpZip Library verwendet.

    Hier ist ein Link

    05 December 2012
    Konrad VilterstenSteve
  • Ab .Net 1.1 greift die einzige verfügbare Methode in die Java-Bibliotheken ein.
    Verwenden der Zip-Klassen in den J # -Klassenbibliotheken zum Komprimieren von Dateien und Daten mit C #
    Nicht sicher, ob sich dies in den letzten Versionen geändert hat >

    01 August 2008
    alumb
  • Sie können eine Bibliothek von Drittanbietern wie SharpZip verwenden, auf die er hingewiesen hat.

    Eine andere Möglichkeit (ohne einen Drittanbieter zu besuchen) ist die Verwendung der Windows Shell-API. Sie müssen einen Verweis auf die COM-Bibliothek von Microsoft Shell Controls and Automation in Ihrem C # -Projekt festlegen. Gerald Gibson hat ein Beispiel unter:

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

    Kopie des Internetarchivs tote Seite

    20 January 2016
    Paul Roubstriker28
  • Meine Antwort wäre, die Augen zu schließen und DotNetZip zu wählen. Es wurde von einer großen Community getestet.

    15 December 2014
    Amit Jokiglenatron
  • GZipStream ist ein wirklich nützliches Dienstprogramm.

    23 February 2014
    Zied RebhiLuciana
  • Dies ist sehr einfach in Java zu tun, und wie oben angegeben, können Sie von C # aus in die java.util.zip-Bibliotheken zugreifen. Referenzen finden Sie unter:

    java.util.zip javadocs
    Beispielcode

    Ich habe dies vor einiger Zeit verwendet, um eine tiefe (rekursive) Zip-Datei einer Ordnerstruktur zu erstellen, aber ich tue es nicht Ich glaube, ich habe das Entpacken schon mal benutzt. Wenn ich so motiviert bin, kann ich den Code später herausziehen und hier bearbeiten.

    05 August 2008
    shsteimer
  • Eine weitere gute Alternative ist DotNetZip .

    09 December 2011
    Rok
  • Sie können eine ZIP-Datei mit dieser Methode erstellen:

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

    und dann können Sie zip entpacken Datei mit diesen Methoden:
    1 - Diese Methode arbeitet mit dem ZIP-Dateipfad

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

    Diese Methode funktioniert mit einem ZIP-Dateistream.

     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));
        }
     
    09 January 2018
    mohsen_1687