2016-03-20 7 views
0

Ich habe zwei Dateien (ich 7zip verwenden): n1.txt.gz und n2.txt.gz. Dann habe ich sie in die Datei n12.txt.gz durch Eingabeaufforderung kombinieren:Wie bestimmt GZipStream die Größe von komprimierten Daten

type n1.txt.gz > n12.txt.gz 
type n2.txt.gz >> n12.txt.gz 

Wenn ich die Datei n12.txt.gz von 7-Zip entpacken, werde ich kombiniert bekommen Original-Dateien (n1 dekomprimiert. txt + n2.txt). Aber wenn ich diesen Code verwenden

public static void Decompress2(String fileSource, String fileDestination, int buffsize) 
{ 
using (var fsInput = new FileStream(fileSource, FileMode.Open, FileAccess.Read)) 
{ 
    using (var fsOutput = new FileStream(fileDestination, FileMode.Create, FileAccess.Write)) 
    { 
    using (var gzipStream = new GZipStream(fsInput, CompressionMode.Decompress)) 
    { 
    var buffer = new Byte[buffsize]; 
    int h; 
    while ((h = gzipStream.Read(buffer, 0, buffer.Length)) > 0) 
    { 
    fsOutput.Write(buffer, 0, h); 
    } 
    } 
    } 
} 
} 

ich zum ersten Teil n12.txt.gz nur dekomprimiert erhalten wird, dekomprimiert das heißt n1.txt.

Warum stoppt GZipStream nach dem ersten Teil der kombinierten Datei? Und wie dekomprimiert 7zip die ganze Datei?

+0

Ich bezweifle wirklich, dass die Kombination von gezippten Dateien funktioniert wie du sagst ... –

+0

@ThorstenDittmar es funktioniert. Probiere es einfach. – Andrei

Antwort

0

GZipStream implementiert keine Methoden zum Dekomprimieren mehrerer Dateien aus einem Stream.

Verwenden Sie eine Bibliothek, die ZIP-Archive wie DotNetZip verarbeitet.

Wenn Sie GZipStream unbedingt verwenden möchten, können Sie den Eingabestrom nach the gzip header durchsuchen und dann GZipStream nur die Teile des Streams zuführen, die zu jeder Datei gehören.

+0

Ok. Vielen Dank. Allerdings habe ich das Gzip-Format gelesen. Wenn ich die Größe jeder Portion in den gzip-Header schreibe, lese ich die Portionen und GZipStream wird sie korrekt dekomprimieren. Aber _7zip_ entpacken meine _n12.txt.gz_ Datei, und die Datei hat nicht die Größe von Teilen. Weißt du wie _7zip_ es macht? – Andrei

+0

Nein, ich weiß nicht, wie 7zip es tut, aber ich denke, sie könnten einfach davon ausgehen, dass Ihr Archiv kaputt ist und versuchen, das Beste daraus zu machen. Werfen Sie einen Blick auf [wie ZIP-Archive strukturiert sind] (https://en.wikipedia.org/wiki/Zip_%28file_format%29#Structure) und Sie werden sehen, dass Ihre Methode das Dateiverzeichnis vermisst, das notwendig ist, um jede Datei zu identifizieren beginnt. –