首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GZipStream未读取整个文件

GZipStream未读取整个文件
EN

Stack Overflow用户
提问于 2010-06-18 17:06:19
回答 4查看 3.2K关注 0票数 9

我有一些代码下载gzipped文件,并解压它们。问题是,我不能让它解压缩整个文件,它只读取前4096个字节,然后再读取大约500个字节。

代码语言:javascript
复制
Byte[] buffer = new Byte[4096];
int count = 0;
FileStream fileInput = new FileStream("input.gzip", FileMode.Open, FileAccess.Read, FileShare.Read);
FileStream fileOutput = new FileStream("output.dat", FileMode.Create, FileAccess.Write, FileShare.None);
GZipStream gzipStream = new GZipStream(fileInput, CompressionMode.Decompress, true);

// Read from gzip steam
while ((count = gzipStream.Read(buffer, 0, buffer.Length)) > 0)
{
    // Write to output file
    fileOutput.Write(buffer, 0, count);
}

// Close the streams
...

我已经检查了下载的文件;压缩后的文件是13MB,并且包含一个XML文件。我已经手动解压缩了XML文件,内容都在那里。但当我使用此代码执行此操作时,它只输出XML文件的最开始部分。

有人知道为什么会发生这种情况吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-06-18 20:06:59

我最终使用gzip可执行文件而不是GZipStream来进行解压缩。由于某种原因,它不能处理文件,但可执行文件可以。

票数 1
EN

Stack Overflow用户

发布于 2010-06-18 17:23:26

编辑

尽量不要让GZipStream保持打开状态:

代码语言:javascript
复制
GZipStream gzipStream = new GZipStream(fileInput, CompressionMode.Decompress,  
                                                                         false);

代码语言:javascript
复制
GZipStream gzipStream = new GZipStream(fileInput, CompressionMode.Decompress);
票数 4
EN

Stack Overflow用户

发布于 2013-10-04 04:36:11

同样的事情也发生在我身上。在我的例子中,只读了6行,然后就到了文件的结尾。所以我意识到,虽然扩展名是gz,但它是由GZipStream不支持的另一种算法压缩的。所以我使用了SevenZipSharp库,它起作用了。这是我的代码

您可以使用SevenZipSharp库

代码语言:javascript
复制
using (var input = File.OpenRead(lstFiles[0]))
{
    using (var ds = new SevenZipExtractor(input))
    {
        //ds.ExtractionFinished += DsOnExtractionFinished;

        var mem = new MemoryStream();
        ds.ExtractFile(0, mem);

        using (var sr = new StreamReader(mem))
        {
            var iCount = 0;
            String line;
            mem.Position = 0;
            while ((line = sr.ReadLine()) != null && iCount < 100)
            {
                iCount++;
                LstOutput.Items.Add(line);
            }

        }
    }
} 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3068382

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档