2012-04-15 7 views
0

Hallo Ich versuche, eine Datei mit GZipStream zu komprimieren.Ich kann Datei nicht korrekt dekomprimieren mit C#

ich meine eigene Erweiterung erstellt haben, nennen wir es .myextension

Ich versuche .myextension zu komprimieren und seine Ausdehnung zu halten. Ich meine, dass ich versuche, eine .myextension auf die gleiche Erweiterung zu komprimieren. Beispiel: Ich habe myfile.myextension und Ich möchte es zu myfile.myextension komprimieren. Es klappt. Ich kann meine Datei wirklich gut komprimieren.

Das Problem ist, dass, wenn ich versuche, es mit GZipStream zu dekomprimieren, es besagt, dass die magische Zahl falsch ist.

Wie kann ich das Problem lösen? Beim Dekomprimieren sollte ich einfach die Erweiterung in .gz ändern? Soll ich es irgendwie konvertieren? Bitte hilf mir, ich habe keine Ahnung, wie ich weitermachen soll.

+1

Dies hat nichts mit der Dateierweiterung zu tun. Können Sie die komprimierte Datei mit einer Anwendung wie 7-zip dekomprimieren? Wenn ja, enthält Ihr Dekomprimierungscode wahrscheinlich einen Fehler. Bitte poste den Code. – Yogu

+1

Es hat nichts mit der Dateinamenserweiterung zu tun. Sie müssen bessere Brotkrumen lassen. –

+0

Erweiterung ist überhaupt kein Problem, lesen Sie vor dem Dekomprimieren von Datei zu Zeichenfolge anstelle von Byte []? zeige einen Code der Dekompression –

Antwort

1

Dies ist eine häufige Frage. Ich möchte Ihnen die ähnliche Themen mit den Lösungen zur Verfügung zu stellen: ‚Magic Number‘

http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=427166&SiteID=1

A ist in der Regel ein fester Wert, und oft erscheinen etwas willkürlichen, möglicherweise nicht entzifferbar. Zum Beispiel kann eine Codezeile hat:

If X = 31 then 
    'Do Something 
End If 

In diesem Fall 31 eine ‚magische Zahl‘: Es hat keine offensichtliche Bedeutung (und so weit wie Codierung betrifft, ein Begriff des Spottes).

Dateien (von verschiedenen Typen) haben oft die ersten paar Bytes, die auf bestimmte Werte gesetzt sind, zum Beispiel eine Datei, die die ersten zwei Bytes als Hexadezimalzahlen hat 42 4D ist eine Bitmap-Datei. Diese Zahlen sind "magische Zahlen" (In diesem Fall entspricht 42 4D den Zeichen BM). Andere Dateien haben ähnliche "magische Zahlen".

http://forums.microsoft.com/msdn/showpost.aspx?postid=1154042&siteid=1

Natürlich ist die Minute jemand (Team) entwickelt eine no-fuss-Komprimierung/Dekomprimierung individuelle Aufgabe, die Zip unterstützt, bzip2, gzip, rar, cab, Glas, daa und ISO-Dateien, ich werde benutze das, bis zu diesem Zeitpunkt bleibe ich bei den Open Source Command Line Utilities.

Natürlich können Sie eine Lösung codieren, aber diese ist so niedrig hängen Obst. Für die Verarbeitung von Zip-Dateien gibt es keine native .NET-Bibliothek (zumindest noch nicht). Jetzt gibt es Unterstützung für die Handhabung der komprimierten Streams innerhalb der ZIP-Datei, aber nicht durch das Archiv selbst navigieren.

Nun, wie ich bereits erwähnt habe, gibt es viele Open-Source-Zip-Utils wie die auf Sourceforge. Diese funktionieren einwandfrei auf Win2003 Server x64, das kann ich bestätigen.

Wenn Sie jedoch auf einer .NET-Lösung für die ZIP-Dekomprimierung bestehen, verwenden Sie http://www.icsharpcode.net/OpenSource/SharpZipLib/, das Open Source ist und über eine saubere und zuverlässige 100% .NET-Implementierung verfügt.

0

Erstens, von anderen Benutzern, die various issues hatten, sollte GZipStream nicht verwendet werden, da es Bugs hat. Kurzzeichenfolgen werden nicht korrekt komprimiert und beschädigte komprimierte Daten werden nicht erkannt. Es ist eine sehr schlechte Implementierung.

Für Ihr Problem sehen andere, die GZipStream verwenden, ein Vier-Byte-Präfix für die gzip-Daten, die die Anzahl der nicht komprimierten Bytes angibt. Wenn das in die Datei geschrieben wird, würde das das Problem verursachen, das Sie sehen. Die gzip-Datei sollte mit den Hex-Bytes 1f 8b beginnen.