2017-04-21 1 views
-1

Ich habe Byte-Array eines Bildes, ich möchte Zip-Datei daraus erstellen.Zip ein MemoryStream eines Bildes

Ich kann das Byte-Array in JPG-Datei erfolgreich speichern, aber wenn ich zip-Datei daraus erstellen, wurde das Bild der ZIP-Datei (das Bild, das in die ZIP-Datei ist) beschädigt und ich kann es nicht öffnen! (wenn ich versuche, das Bild zu öffnen, brüllen Fehlermeldung Winrar Anzeige: D: \ sample.zip: Das Archiv entweder in unbekanntem Format oder beschädigt)

Hinweis: Mein Bild im Speicher und I don‘ Ich möchte eine physische Image-Datei erstellen.

Hier ist meine Codes:

private void Zip(byte[] imageBytes) 
{ 
    string filePath = string.Empty; 
    using (var ms = new MemoryStream()) 
    using (var zip = new ZipArchive(ms, ZipArchiveMode.Create)) 
    { 
     var entry = zip.CreateEntry("sample.jpg", CompressionLevel.Optimal); 

     using (var entryStream = entry.Open()) 
     using (var fileToCompressStream = new MemoryStream(imageBytes)) 
     { 
      fileToCompressStream.CopyTo(entryStream); 
     } 

     using (var fs = new FileStream(baseFilePath + "sample.zip", FileMode.Create)) 
     { 
      ms.Position = 0; 
      ms.WriteTo(fs); 
     } 
    } 
} 
+0

ich von imageBytes (Parameter) neue Bitmap-Instanz erstellen auch und in entryStream speichern, aber gleiche Problem ! – Moradof

Antwort

0

sollten Sie in der Lage sein, genau das zu tun:

using System.IO; 
using System.IO.Compression; 
using System.Text; 

private void Zip (byte[] imageBytes) { 

string fileName = baseFilePath + "sample.zip"; 
using (FileStream f2 = new FileStream(fileName, FileMode.Create)){ 
     using (GZipStream gz = new GZipStream(f2, CompressionMode.Compress, false)) 
     { 
      gz.Write(imageBytes, 0, imageBytes.Length); 
     } 
    } 
} 
+0

Es funktioniert gut. Vielen Dank. Wie kann ich den Namen der Bilddatei festlegen? (es speichert mit dem gleichen Namen der Zip-Datei ohne jede Erweiterung) – Moradof

+0

Ich denke, GZip ist nicht gut für meine Situation, weil ich Multi-Bild in eine Zip-Datei schließlich und GZipStream ist gut für Zip nur eins Datei. Habe ich recht ? – Moradof

+0

Sie sind richtig lesen Sie hier, wie Sie mehrere Dateien tun: http://StackOverflow.com/Questions/24571773/How-Do-Izip-Multiple-Files-Use-Gzipstream-in-C-Sharp – Avitus