首页 新闻 会员 周边

如何解压缩.gz文件

0
悬赏园豆:80 [已解决问题] 解决于 2012-07-10 21:16

 //zipfilename是.gz所在路径,unzipfilename是解压文件的文件名

private void UnGzipFile(string zipfilename, string unzipfilename)
        {

            string dir = "";
            //解压文件夹为空时默认与压缩文件同一级目录下,跟压缩文件同名的文件夹  
            if (dir == "")
                dir = zipfilename.Replace(Path.GetFileName(zipfilename), Path.GetFileNameWithoutExtension(zipfilename));
            if (!dir.EndsWith("//"))
                dir += "//";
            if (!Directory.Exists(dir))
                Directory.CreateDirectory(dir);
            //创建压缩文件的输入流实例
            using (GZipInputStream zipFile = new GZipInputStream(File.OpenRead(zipfilename)))
            {
                //创建目标文件的流
                using (FileStream destFile = File.Open(dir+ unzipfilename, 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);//写入目标文件
                    }
                }
            }
        }

引用using ICSharpCode.SharpZipLib.GZip;

.gz压缩包里面就有1个日志文件,解压出来的文件是空文件里面什么内容都没有

求各位大神帮看看有什么问题

问题补充:

buffersize = zipFile.Read(FileData, 0, FileData.Length);代码执行到这时返回为0

飒沓如流星的主页 飒沓如流星 | 初学一级 | 园豆:5
提问于:2012-07-09 18:33
< >
分享
最佳答案
0

问题找到了ICSharpCode.SharpZipLib.dll有问题,重新找了个地址下载就OK了

飒沓如流星 | 初学一级 |园豆:5 | 2012-07-10 21:15
其他回答(3)
0
byte[] FileData = new byte[1024];//创建缓冲数据
int readCount;//实际读取文件的长度
while ((realCount =destFile.Read(FileData0, FileData.Length)) > 0) {
              zipFile.Write(FileData, 0, readCount);//写入目标文件 }
Halower | 园豆:1723 (小虾三级) | 2012-07-09 21:25

这个好像没有什么改动把

支持(0) 反对(0) 飒沓如流星 | 园豆:5 (初学一级) | 2012-07-10 09:20

这个好像没有什么改动把

我跟踪了就是在 destFile.Read(FileData0, FileData.Length)   得到的值为0

但实际是有文件和数据的     

支持(0) 反对(0) 飒沓如流星 | 园豆:5 (初学一级) | 2012-07-10 09:27
0

是不是压缩格式有问题。或者 是还缺少什么参数。在初始化 GZipInputStream 的时候。

無限遐想 | 园豆:3740 (老鸟四级) | 2012-07-10 10:14
0

用 GZipStream 试试,参考代码(代码来源):

FileStream stream = new FileStream(unzipfilename, FileMode.Create); 
GZipStream uncompressed = new GZipStream(stream, CompressionMode.Decompress);

uncompressed.Write(bytes,0,bytes.Length); 
uncompressed.Flush();
uncompressed.Close();

stream.Dispose();
收获园豆:80
dudu | 园豆:30994 (高人七级) | 2012-07-10 13:31

FileStream stream = new FileStream(unzipfilename, FileMode.Create); 这句是创建文件
GZipStream uncompressed = new GZipStream(stream, CompressionMode.Decompress);
那这个是在哪指定需要解压缩的文件

支持(0) 反对(0) 飒沓如流星 | 园豆:5 (初学一级) | 2012-07-10 13:53

@飒沓如流星: stream, 以流的方式读取需要解压缩的文件

支持(0) 反对(0) dudu | 园豆:30994 (高人七级) | 2012-07-10 13:54

@dudu: FileStream stream = new FileStream("D:\\log\\2012-07-02-0000-2330.log.gz", FileMode.Open);
是这样运行到

uncompressed.Write(bytes, 0, bytes.Length);

报错了

支持(0) 反对(0) 飒沓如流星 | 园豆:5 (初学一级) | 2012-07-10 14:04

@飒沓如流星: 

用System.IO.File.OpenRead,参考:GZipStream and decompression

支持(0) 反对(0) dudu | 园豆:30994 (高人七级) | 2012-07-10 14:26

@dudu: 

 FileStream outputStream =
                new FileStream(dir + unzipfilename, FileMode.Create, FileAccess.Write);


            int bufferSize = 8192;
            int bytesRead = 0;
            byte[] buffer = new byte[bufferSize];
            GZipStream decompressionStream =
                new GZipStream(File.OpenRead(zipfilename), CompressionMode.Decompress);
            // 把压缩了的数据通过GZipStream解压缩后再读出来
            // 读出来的数据就存在数组里
            while ((bytesRead = decompressionStream.Read(buffer, 0, bufferSize)) > 0)
            {
                // 把解压后的数据写入到输出数据流
                outputStream.Write(buffer, 0, bytesRead);
            }
            decompressionStream.Close();

            outputStream.Close();

 

 

这样有错么?decompressionStream.Read(buffer, 0, bufferSize)还是为0

支持(0) 反对(0) 飒沓如流星 | 园豆:5 (初学一级) | 2012-07-10 14:37

@飒沓如流星: 接下来问题你来搞定,参考文章:C# 温故而知新:Stream篇 (四)

支持(0) 反对(0) dudu | 园豆:30994 (高人七级) | 2012-07-10 14:47

@dudu: 晕啊,现在这样不还是和我上面的一样

支持(0) 反对(0) 飒沓如流星 | 园豆:5 (初学一级) | 2012-07-10 14:55

@飒沓如流星: 如果还是解决不了,建议把这部分代码打包一下提供下载,这样别人可以在自己的机器上调试一下

支持(0) 反对(0) dudu | 园豆:30994 (高人七级) | 2012-07-10 15:05

@dudu: 好像只能上传图片,没有上传文件的功能

支持(0) 反对(0) 飒沓如流星 | 园豆:5 (初学一级) | 2012-07-10 15:10

@飒沓如流星: 开通博客,可以在博客后台上传文件,申请博客:passport.cnblogs.com/BlogApply.aspx

支持(0) 反对(0) dudu | 园豆:30994 (高人七级) | 2012-07-10 15:13
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册