gpt4 book ai didi

c# - 加载文件不工作 - GZip header 中的魔数(Magic Number)不正确

转载 作者:太空狗 更新时间:2023-10-30 00:42:40 28 4
gpt4 key购买 nike

我正在尝试创建一个保存/加载类,它可以选择保存和加载文件压缩文件。以下是我到目前为止所拥有的。逐步执行它似乎工作得很好,除了我得到一个“GZip header 中的魔数(Magic Number)不正确”的异常。我不明白这是怎么回事,因为我正在检查以确保在我传递它之前数字已经存在,并且我已经通过外部程序验证它是一个 GZip 文件。

如能帮助我找出错误之处,我们将不胜感激。欢迎对我的代码提出建设性的批评 - 谢谢!

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;
}
}

最佳答案

似乎您在将流传递给解压缩器之前读取了魔数(Magic Number)(那时不会读取魔数(Magic Number),因为您已经读取了它)。

在解压缩之前使用 stream.Seek(0,SeekOrigin.Begin)

关于c# - 加载文件不工作 - GZip header 中的魔数(Magic Number)不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14201858/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com