首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何将文件解压缩为.NET内存流?

如何将文件解压缩为.NET内存流?
EN

Stack Overflow用户
提问于 2014-03-24 17:04:43
回答 6查看 63.8K关注 0票数 52

我有文件(从第三方)是FTP的,在我们的服务器上的目录。我下载它们并处理它们,即使是“x”分钟。效果很好。

现在,其中一些文件是.zip文件。这意味着我不能处理它们。我得先解开拉链。

FTP没有zip/unzipping的概念-所以我需要抓取zip文件,解压缩它,然后处理它。

看看MSDN zip api,似乎没有办法解压到内存流?

所以唯一的办法就是...

  1. 解压到一个文件(什么目录?需要一些非常临时的位置...)
  2. 读取文件contents
  3. Delete文件。

注意:文件的内容很小--比如4k <-> 1000k。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2014-03-24 17:14:12

Zip压缩支持是内置的:

代码语言:javascript
复制
using System.IO;
using System.IO.Compression;
// ^^^ requires a reference to System.IO.Compression.dll
static class Program
{
    const string path = ...
    static void Main()
    {
        using(var file = File.OpenRead(path))
        using(var zip = new ZipArchive(file, ZipArchiveMode.Read))
        {
            foreach(var entry in zip.Entries)
            {
                using(var stream = entry.Open())
                {
                    // do whatever we want with stream
                    // ...
                }
            }
        }
    }
}

通常,你应该避免将其复制到另一个流中--只需“按原样”使用它,然而,如果你在一个MemoryStream中绝对需要它,你可以这样做:

代码语言:javascript
复制
using(var ms = new MemoryStream())
{
    stream.CopyTo(ms);
    ms.Position = 0; // rewind
    // do something with ms
}
票数 101
EN

Stack Overflow用户

发布于 2014-03-24 17:13:51

您可以使用ZipArchiveEntry.Open来获取流。

这段代码假设zip归档文件有一个文本文件。

代码语言:javascript
复制
using (FileStream fs = new FileStream(path, FileMode.Open))
using (ZipArchive zip = new ZipArchive(fs) )
{
    var entry = zip.Entries.First();

    using (StreamReader sr = new StreamReader(entry.Open()))
    {
        Console.WriteLine(sr.ReadToEnd());
    }
}
票数 21
EN

Stack Overflow用户

发布于 2016-10-20 12:37:16

代码语言:javascript
复制
using (ZipArchive archive = new ZipArchive(webResponse.GetResponseStream()))
{
     foreach (ZipArchiveEntry entry in archive.Entries)
     {
        Stream s = entry.Open();
        var sr = new StreamReader(s);
        var myStr = sr.ReadToEnd();
     }
} 
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22604941

复制
相关文章

相似问题

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