Load-Datei Nicht funktioniert - Die Magische Zahl im GZip-header ist nicht korrekt

Ich bin versucht, erstellen Sie eine Speichern/Laden-Klasse, die die option für das speichern & load-Dateien komprimierte Dateien. Unten ist das, was ich habe, so weit. Durchlaufen es scheint zu funktionieren gut, außer dass ich eine "Magische Zahl im GZip-header ist nicht korrekt" Ausnahme. Ich verstehe nicht wie das sein kann, wie ich bin, überprüfung, um sicherzustellen, dass die Zahl es, bevor ich es übergeben, und ich habe überprüft, die über ein externes Programm, es ist eine GZip-Datei.

Jede Hilfe, herauszufinden, wo ich schief ging, würde geschätzt werden. Konstruktive Kritik an meinem code ist immer willkommen - Danke!

public static class SaveLoad
{
    public static void Save(string fileName, object savefrom, bool compress)
    {
        FileStream stream = new FileStream(fileName, FileMode.Create);

        BinaryFormatter formatter = new BinaryFormatter();
        if (compress)
        {
            GZipStream compressor = new GZipStream(stream, CompressionMode.Compress);
            formatter.Serialize(compressor, savefrom);
            compressor.Close();
        }
        else { formatter.Serialize(stream, savefrom); }

        stream.Close();
    }

    public static object Load(string fileName)
    {
        object loadedObject = null;

        try
        {
            FileStream stream = new FileStream(fileName, FileMode.Open);

            BinaryFormatter formatter = new BinaryFormatter();

            if (stream.Length > 4)
            {
                byte[] data = new byte[4];
                stream.Read(data, 0, 4);

                if (BitConverter.ToUInt16(data, 0) == 0x8b1f) //GZIP_LEAD_BYTES == 0x8b1f
                {
                    GZipStream decompressor = new GZipStream(stream, CompressionMode.Decompress);
                    loadedObject = formatter.Deserialize(decompressor); //Exception
                    decompressor.Close();
                }
                else { loadedObject = formatter.Deserialize(stream); }
            }
            stream.Close();
        }
        catch (Exception e)
        {
            Logger.StaticLog.AddEvent(new Logger.lEvent(null, Logger.lEvent.EventTypes.Warning, "Failed to load file: " + fileName, e)
            {
                SendingObject = "SaveLoad"
            });
            Logger.StaticLog.WriteLog();
            throw;
        }

        return loadedObject;
    }
}
Wahrscheinlich würde Sie suchen müssen, wieder in die position 0 zu ermöglichen GZipStream zu Lesen die ersten 4 bytes, die Sie bereits gelesen zu haben.
werfen Sie einen Blick auf meine Antwort

InformationsquelleAutor Anthony Nichols | 2013-01-07

Schreibe einen Kommentar