【发布时间】:2012-06-26 09:26:14
【问题描述】:
我一直在研究解析第 3 方 fms 日志的函数。日志采用 Gzip 格式,因此我使用了适用于我们使用的任何其他 Gzip 文件的解压缩功能。
解压这些文件时,我只得到压缩文件的第一行,也不例外,只是没有找到其余的字节,好像第一行有一个EOF。 我尝试使用 Ionic.Zlib 而不是 System.IO.Compression 但结果是一样的。这些文件似乎没有以任何方式损坏,使用 Winrar 解压缩它们。
如果有人知道如何解决这个问题,我将不胜感激。 谢谢
您可以在此处下载示例文件: http://www.adjustyourset.tv/fms_6F9E_20120621_0001.log.gz
这是我的解压功能:
public static bool DecompressGZip(String fileRoot, String destRoot)
{
try
{
using (FileStream fileStram = new FileStream(fileRoot, FileMode.Open, FileAccess.Read))
{
using (FileStream fOutStream = new FileStream(destRoot, FileMode.Create, FileAccess.Write))
{
using (GZipStream zipStream = new GZipStream(fileStram, CompressionMode.Decompress, true))
{
byte[] buffer = new byte[4096];
int numRead;
while ((numRead = zipStream.Read(buffer, 0, buffer.Length)) != 0)
{
fOutStream.Write(buffer, 0, numRead);
}
return true;
}
}
}
}
catch (Exception ex)
{
LogUtils.SaveToLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "Eror decompressing " + fileRoot + " : " + ex.Message, Constants.systemLog, 209715200, 6);
return false;
}
}
【问题讨论】:
-
你确实意识到你不需要像这样嵌套使用?您可以省略前两个之后的大括号(仅保留第三组),并将所有三个 using 直接放在彼此下方,并具有相同的缩进。
-
我遇到了和你一样的问题 - 这很奇怪 - 我会仔细看看。
-
我尝试使用 7-Zip 将日志文件压缩为 .gz 并通过上述方法成功解压,而来自发布链接的存档仅用第一行解压,不同之处在于一个压缩在UNIX 机器(来自链接的那个),而另一台是在 Windows 机器上压缩的,如果你在 7-Zip 中打开它或使用 WinRar 查看属性,你会看到“Host-OS”是“MS-DOS”,而在如果是来自链接的存档,它是“UNIX”,其他成功解压缩的存档是否也来自 UNIX?
标签: c# gzip gzipstream