Charger le Fichier ne fonctionne Pas - Le nombre magique dans GZip-tête n'est pas correcte

Je tente de créer une sauvegarde/Chargement de la classe qui a l'option d'enregistrement de & charger des fichiers des fichiers compressés. Voici ce que j'ai jusqu'à présent. Marcher à travers elle semble fonctionner très bien, sauf que je "Le nombre magique dans GZip-tête n'est pas correcte" l'exception". Je ne comprends pas comment cela peut être comme je suis en vérifiant que le nombre est-il avant de me le faire passer, et j'ai vérifié via un programme externe que c'est un fichier GZip.

Toute aide à trouver où je suis allé mal serait appréciée. La critique Constructive de mon code est toujours la bienvenue - Merci!

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;
}
}
Il semble probable que vous auriez à chercher de retour à la position 0 pour permettre à GZipStream de lire les 4 premiers octets que vous avez déjà lu.
prendre un coup d'oeil à mon répondre

OriginalL'auteur Anthony Nichols | 2013-01-07