我在互联网上的某个地方抓了下面的代码,我用它来解压缩gzip文件,比如http://wwwmaster.postgresql.org/download/mirrors-ftp/pgadmin3/release/v1.8.4/src/pgadmin3-1.8.4.tar.gz,但是当我运行它时,我得到一个异常,说明这个神奇的数字没有匹配。
public byte[] Download(string pUrl) {
WebClient wc = new WebClient();
byte[] bytes = wc.DownloadData(pUrl);
return UnGzip(bytes, 0);
}
private static byte[] UnGzip(byte[] data, int start) {
int size = BitConverter.ToInt32(data, data.Length - 4);
byte[] uncompressedData = new byte[size];
MemoryStream memStream = new MemoryStream(data, start, (data.Length - start));
memStream.Position = 0;
GZipStream gzStream = new GZipStream(memStream, CompressionMode.Decompress);
try {
gzStream.Read(uncompressedData, 0, size);
} catch (Exception gzError) {
throw;
}
gzStream.Close();
return uncompressedData;
}
导致此问题的代码有什么问题?
答案 0 :(得分:3)
问题是您在问题中指定的URL实际上并不提供gzip文件。它将浏览器带到您选择镜像的页面。
如果您暂时更改要使用的Download
方法:
string text = wc.DownloadString(pUrl);
Console.WriteLine(text);
你会看到镜像选择的所有HTML。
如果您使用的网址是实际 gz文件,例如http://wwwmaster.postgresql.org/redir/170/h/pgadmin3/release/v1.8.4/src/pgadmin3-1.8.4.tar.gz然后就可以了。
答案 1 :(得分:1)
我无法让GZipStream读取您链接的文件,但似乎解压缩其他GZip文件就好了。例如:
ftp://gnu.mirror.iweb.com/gnu/bash/bash-1.14.0-1.14.1.diff.gz
ftp://gnu.mirror.iweb.com/gnu/emacs/elisp-manual-21-2.8.tar.gz
您链接的文件可能已损坏?或者它可能使用非标准或新的GZip格式。
答案 2 :(得分:0)
我使用DotNetZip在.zip文件方面取得了一些成功。根据文档,它也适用于GZip。你可以尝试一下这个人的图书馆。
答案 3 :(得分:-1)