Files Zippen mit .NET

tomkruse

Erfahrenes Mitglied
Hallo!

Ich möchte gerne in meiner Anwendung Files zippen bevor ich sie in eine Datenbank schreibe, damit sie dort nicht so viel Platz verbraten. Habe mir dazu die NetZipLib heruntergeladen und eingebaut. Hat auch soweit alles gut geklappt, aber die Zips werden nicht so wie sie sollten. Also die gezippten Files haben nicht ihre volle Länge sondern nur 200-400 Bytes.

Hier mein Code:

Code:
    private byte[] zipFile(byte[] pFileToZip)
    {
            MemoryStream msOut = new MemoryStream();
            ZipOutputStream zos = new ZipOutputStream(msOut,false);

            FileStream fops = new FileStream("c:\\temp\\testzip.zip", FileMode.Create);
            ZipOutputStream zos2 = new ZipOutputStream(fops, false);

            zos.PutNextEntry("file.xls");

            MemoryStream msIn = new MemoryStream(pFileToZip);

            byte[] buffer = new byte[30];
            int bytesRead = 0;
            int readComplete = 0;

            do
            {
                bytesRead = msIn.Read(buffer, 0, buffer.Length);
                zos.Write(buffer, 0, bytesRead);
                readComplete += bytesRead;
            }
            while (bytesRead > 0);

            zos.Flush();
            zos.Close();

            zos2.PutNextEntry("file.xls");
            msIn.Seek(0,0);

            do
            {
                bytesRead = msIn.Read(buffer, 0, buffer.Length);
                zos2.Write(buffer, 0, bytesRead);
            }
            while (bytesRead > 0);

            zos2.Flush();
            zos2.Close();

            System.Console.WriteLine("Anzahl Bytes: " + msOut.ToArray().Length);
            System.Console.WriteLine("readComplete: " + readComplete);

            return (msOut.ToArray());
        }
    }

Man sieht, ich mache das Ganze doppelt, da ich das gezippte File zur Überprüfung auch auf meiner Platte haben wollte. Das Ergebnis ist aber in beiden Fällen das Gleiche. Das vollständige Lesen des MemoryStreams funktioniert. In readComplete steht am Ende die korrekte Anzahl von Bytes. Die Länge von msOut beträgt aber nur um die 200 - 400 Bytes.

Die Frage ist nun: was mache ich falsch ..?

Noch ein Hinweis: Ich benutze Framework 2. Das Projekt ist für Framework 2 geschrieben und ich kann das nicht ändern. Daher muß ich auch die Zip-Funktionalität von Aussen zuführen. Ich glaube ab 3.5 oder so gibts das auch schon in .NET integriert, oder?

viele Grüsse

Thomas.
 
Hallo!

Das ist aber eine andere Lib als die, die ich verwende. Heisst das, ich soll die andere verwenden oder was genau meinst Du hier?

viele Grüsse

Thomas.
 
Das ist aber eine andere Lib als die, die ich verwende.
Google liefert keine Treffer für NetZipLib. Wo hast du die denn her?
Heisst das, ich soll die andere verwenden oder was genau meinst Du hier?
Von der API her schien mir deine Bibliothek die ziemlich ähnlich zur SharpZipLib zu sein, zumal der Name auch ähnlich ist - da hatte ich angenommen du verwendest die SharpZipLib bereits. Es sollte allerdings kein großer Aufwand sein die Bibliotheken auszutauschen und den Code zu kopieren.

Gruß
 
Zurück