{
//创建目标文件的流
FileStream destFile = File.Open(Path.GetFileNameWithoutExtension(fileToUnZip), FileMode.Create);
int buffersize = 2048;//缓冲区的尺寸,一般是2048的倍数
byte[] FileData = new byte[buffersize];//创建缓冲数据
while (buffersize > 0)//一直读取到文件末尾
{
buffersize = zipFile.Read(FileData, 0, buffersize);//读取压缩文件数据
destFile.Write(FileData, 0, buffersize);//写入目标文件
}
destFile.Close();//关闭目标文件
zipFile.Close();//关闭压缩文件
}
fileToUnZip是.gz文件的绝对路径
程序在 buffersize = zipFile.Read(FileData, 0, buffersize);//读取压缩文件数据这行报错,
错误是:ICSharpCode.SharpZipLib.GZip.GZipException:“Error GZIP header, first magic byte doesn't match”
在网上看了好多博客,试了好多版本都不行,求助各位大神~~~
5 个解决方案
#1
1, .gz文件你确定没有问题吗? 用第三方解压缩工具先确认下
2, .Net已经自带了GZipStream提供压缩文件的相关操作,不妨一试.
3.
while这句break条件的判断可能会有问题,可以自己试试
2, .Net已经自带了GZipStream提供压缩文件的相关操作,不妨一试.
3.
while这句break条件的判断可能会有问题,可以自己试试
while (buffersize > 0)//一直读取到文件末尾
#2
这个.gz文件我确定没有问题,同时也没有其他应用打开这个文件,正常右键解压缩没问题
Stream inStream = new GZipInputStream(File.OpenRead(fileToUnZip));
GZipStream compressedStream = new GZipStream(inStream, System.IO.Compression.CompressionMode.Decompress);
FileStream fs = new FileStream(fileToUnZip, FileMode.Create);
byte[] buf = new byte[1024];
int count = 0;
do
{
count = inStream.Read(buf, 0, buf.Length);
fs.Write(buf, 0, count);
}
while (count > 0);
fs.Close();
compressedStream.Close();
inStream.Close();
这是我另一段尝试解压缩.gz文件的代码,结果也是在 count = inStream.Read(buf, 0, buf.Length);报一样的错
而且我发现这两段代码都是读文件读到最后的时候才报错
#3
请问while (buffersize > 0)这句那里不对呢?
#4
Read返回字节数的判断放到循环里去
while(true)
{
count = inStream.Read(buf, 0, buf.Length);
if(count > 0)
fs.Write(buf, 0, count);
else
break;
}
#5
Error GZIP header指的压缩文件头错误,如果代码没问题,那也许是你压缩包的版本和你dll的类库所支持版本不兼容
#1
1, .gz文件你确定没有问题吗? 用第三方解压缩工具先确认下
2, .Net已经自带了GZipStream提供压缩文件的相关操作,不妨一试.
3.
while这句break条件的判断可能会有问题,可以自己试试
2, .Net已经自带了GZipStream提供压缩文件的相关操作,不妨一试.
3.
while这句break条件的判断可能会有问题,可以自己试试
while (buffersize > 0)//一直读取到文件末尾
#2
1, .gz文件你确定没有问题吗? 用第三方解压缩工具先确认下
2, .Net已经自带了GZipStream提供压缩文件的相关操作,不妨一试.
3.
while这句break条件的判断可能会有问题,可以自己试试
while (buffersize > 0)//一直读取到文件末尾
这个.gz文件我确定没有问题,同时也没有其他应用打开这个文件,正常右键解压缩没问题
Stream inStream = new GZipInputStream(File.OpenRead(fileToUnZip));
GZipStream compressedStream = new GZipStream(inStream, System.IO.Compression.CompressionMode.Decompress);
FileStream fs = new FileStream(fileToUnZip, FileMode.Create);
byte[] buf = new byte[1024];
int count = 0;
do
{
count = inStream.Read(buf, 0, buf.Length);
fs.Write(buf, 0, count);
}
while (count > 0);
fs.Close();
compressedStream.Close();
inStream.Close();
这是我另一段尝试解压缩.gz文件的代码,结果也是在 count = inStream.Read(buf, 0, buf.Length);报一样的错
而且我发现这两段代码都是读文件读到最后的时候才报错
#3
请问while (buffersize > 0)这句那里不对呢?
#4
1, .gz文件你确定没有问题吗? 用第三方解压缩工具先确认下
2, .Net已经自带了GZipStream提供压缩文件的相关操作,不妨一试.
3.
while这句break条件的判断可能会有问题,可以自己试试
while (buffersize > 0)//一直读取到文件末尾
这个.gz文件我确定没有问题,同时也没有其他应用打开这个文件,正常右键解压缩没问题
Stream inStream = new GZipInputStream(File.OpenRead(fileToUnZip));
GZipStream compressedStream = new GZipStream(inStream, System.IO.Compression.CompressionMode.Decompress);
FileStream fs = new FileStream(fileToUnZip, FileMode.Create);
byte[] buf = new byte[1024];
int count = 0;
do
{
count = inStream.Read(buf, 0, buf.Length);
fs.Write(buf, 0, count);
}
while (count > 0);
fs.Close();
compressedStream.Close();
inStream.Close();
这是我另一段尝试解压缩.gz文件的代码,结果也是在 count = inStream.Read(buf, 0, buf.Length);报一样的错
而且我发现这两段代码都是读文件读到最后的时候才报错
Read返回字节数的判断放到循环里去
while(true)
{
count = inStream.Read(buf, 0, buf.Length);
if(count > 0)
fs.Write(buf, 0, count);
else
break;
}
#5
Error GZIP header指的压缩文件头错误,如果代码没问题,那也许是你压缩包的版本和你dll的类库所支持版本不兼容