社区首页 >问答首页 >如何从MemoryStream中解压缩多个文件

如何从MemoryStream中解压缩多个文件
EN

Stack Overflow用户
提问于 2012-02-14 14:56:01
回答 2查看 5.1K关注 0票数 1

我正在下载一个压缩文件,并用以下代码解压它:

代码语言:javascript
代码运行次数:0
复制
 WebClient client = new WebClient();
 MemoryStream download = new MemoryStream(client.DownloadData(targetUrl));
 var data = new GZipStream(download, CompressionMode.Decompress, true);

从这里,我如何查看压缩存档中的文件并对它们进行排序?我知道这个归档文件中有一个文件是我根据其文件类型(.csv)需要的,因此我需要将其取出。如何通过c#做到这一点呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-14 15:27:18

GZipStream用于对一个stream...you进行压缩和解压缩,不支持对多个文件进行压缩和解压缩。实际上,您可以,但您应该开发一些方法来将这些文件合并到一个流中,并且还应该知道如何进行反向操作(从流中获取这些文件)。如果你只有一个文件,你可以这样做:

代码语言:javascript
代码运行次数:0
复制
using (var outFile = File.Create(outputFileName))
{
    using (GZipStream gzip = new GZipStream(download, CompressionMode.Decompress))
    {
        var buffer = new byte[4096];
        var numRead = 0;
        while ((numRead = gzip.Read(buffer, 0, buffer.Length)) != 0)
        {
            outFile.Write(buffer, 0, numRead);
        }
    }
}

Here是一篇描述如何使用GZipStream压缩/解压缩多个文件的文章,但正如您所看到的,作者开发了自己的"zip“格式来存储多个文件,并且使用GZipStream压缩单个流。

在这种情况下,如果没有进行压缩,很可能会收到标准的压缩文件,在这种情况下,可以使用名为SharpZipLib的库对内容进行解压缩。

下面是一个使用SharpZipLib的示例

代码语言:javascript
代码运行次数:0
复制
using (var s = new ZipInputStream(download))
{
    ZipEntry theEntry;
    while ((theEntry = s.GetNextEntry()) != null) 
    {
        string directoryName = Path.GetDirectoryName(theEntry.Name);
        string fileName      = Path.GetFileName(theEntry.Name);
        
        if(fileName == myFileName)
        {
            using (FileStream streamWriter = File.Create(theEntry.Name)) 
            {
                int size = 2048;
                byte[] data = new byte[2048];
                while (true) 
                {
                    size = s.Read(data, 0, data.Length);
                    if (size > 0) 
                    {
                        streamWriter.Write(data, 0, size);
                    } 
                    else 
                    {
                        break;
                    }
                }
            }
        }
    }
}
票数 1
EN

Stack Overflow用户

发布于 2012-02-14 15:51:22

您是否正在从某个地方提取ZIP文件,并尝试从归档文件中提取单个文件?

您可以使用ZipPackage类来执行此操作。

http://msdn.microsoft.com/en-us/library/system.io.packaging.zippackage.aspx

具体参见GetPart方法的示例代码:

http://msdn.microsoft.com/en-us/library/system.io.packaging.package.getpart.aspx

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

https://stackoverflow.com/questions/9279066

复制
相关文章
如何在 Linux 中解压缩 .Z 文件?
Linux操作系统广泛应用于服务器和开发环境中,而在Linux系统中经常会遇到以.Z为扩展名的压缩文件。.Z是一种使用Unix标准的压缩格式,通常由compress工具创建。本文将详细介绍在Linux中如何解压缩.Z文件,以及相关的基本知识和实用技巧。
网络技术联盟站
2023/06/25
9680
如何在 Linux 中解压缩 .Z 文件?
如何同时从多个文本文件读取数据
在很多时候,需要对多个文件进行同样的或者相似的处理。例如,你可能会从多个文件中选择数据子集,根据多个文件计算像总计和平均值这样的统计量。当文件数量增加时,手动处理文件的可能性会减小,出错的概率会增加。
TalkPython
2019/05/24
3.9K0
如何在Ansible中复制多个文件和目录
Ansible 通过 copy 和 fetch 模块提供了基本的复制文件和目录的功能.
东风微鸣
2022/04/21
17.3K2
如何在Ansible中复制多个文件和目录
如何解压缩 tar.xz 文件
tar命令允许你创建和解压缩 tar 包。它支持很多压缩算法,例如 gzip, bzip2, lzip, lzop, xz 和 compress。
雪梦科技
2020/05/09
51.9K0
如何解压缩 tar.xz 文件
dotnet bitmap(MemoryStream)
bitmap using (MemoryStream ms = new MemoryStream(image)) //容易出现异常 { bmImage = new Bitmap(Image.FromStream(ms)); ms.Close(); } bitmapdata //PixelFormat设置错误会修改数据 BitmapData bmpData = bmp.LockBits(new System.Drawing.Rectangle(0, 0, width, height), ImageL
sofu456
2022/05/06
3790
PowerBI从Onedrive文件夹中获取多个文件,依然不使用网关
整个过程的PQ底层逻辑很清楚,使用一个示例文件作为函数,然后用这个函数遍历文件夹中的所有文件,最终将结果合并到一张表中:
陈学谦
2020/05/07
6.9K0
如何在Linux中创建文件?多个文件创建操作命令。
如果文件file1.txt不存在,则上面的命令将创建该文件,否则,它将更改其时间戳。
用户5005176
2021/08/10
39K0
如何从多个角度分析问题?
拆解其实就是做加法,A=维度1+维度2+维度3+...。比如上面的例子,老妈把优秀拆解成:1)个子高 2)家庭背景好 3)长的好看。也就是优秀=个子高(维度1)+家庭背景好(维度2)+长的好看(维度3)。
猴子聊数据分析
2019/08/15
1.9K0
文件解压缩失败
之前出过一个问题,伙伴发过来的文件莫名打不开,重发依旧,后面查询之后,才弄明白真正的原因在压缩软件上面。
@坤的
2019/05/24
2.4K0
Centos8中如何更改文件夹中多个文件的扩展名
在目录中递归更改文件扩展名的最常见方法是使用 shell 的 for 循环。我们可以使用 shell 脚本提示用户输入目标目录、旧的扩展名和新的扩展名以进行重命名。以下是脚本内容:
用户7639835
2021/09/01
3.7K0
Centos8中如何更改文件夹中多个文件的扩展名
在目录中递归更改文件扩展名的最常见方法是使用 shell 的 for 循环。我们可以使用 shell  提示用户输入目标目录、旧的扩展名和新的扩展名以进行重命名。以下是 内容:
用户1685462
2021/09/05
3.3K0
Centos8中如何更改文件夹中多个文件的扩展名
在目录中递归更改文件扩展名的最常见方法是使用 shell 的 for 循环。我们可以使用 shell 脚本提示用户输入目标目录、旧的扩展名和新的扩展名以进行重命名。以下是脚本内容:
用户9236362
2021/11/30
4K0
IDEA 中如何设置同时打开多个文件且分行显示
有时候要是打开多个文件,要么都显示在一行,要么因为空间不足,就给省略显示,这样看着,或者点着,都不是很方便 IntelliJ IDEA 这个编辑器就提供了应对办法,要是知道怎么设置,那是最好,不知道的可以参考如下图的修改: 1,修改上限值,可以最多显示30个tabs,
似水的流年
2019/12/05
2K0
Linux 中复制文件到多个目录中
在学习 Linux 的过程中,对于新手而言总是会使用几个命令来完成一个简单的任务。对正在熟悉使用终端的人这是很容易理解的行为。然而,如果你想要成为一个老手,学习一些“快捷命令”会显著减少时间浪费。
小小工匠
2021/08/16
5.4K0
Linux解压缩文件
总的来说这是两种格式的压缩文件,tar是归档文件,gz是压缩文件,tar.gz是一种Linux下常用的压缩文件格式,一般的源代码包都是使用这种压缩文件的
impressionyang
2020/08/27
5.8K0
Linux解压缩文件
如何拆分大txt文件成多个txt文件
有时候txt文件过大,使用以下查看工具查看时会提示文件过大,打开缓慢,同时很卡滞,如果我们把较大的txt文本文件拆分成多个小的txt文件,使用起来就比较方便。下面介绍如何把较大的txt文件拆分成多个小的txt文件。
皇上得了花柳病
2021/04/23
13K1
如何一下删除多个文件
按WIN键+R,输入CMD,打开命令提示符. 到你要删的目录上.例如E盘Program Files目录的文件 e: 进入E盘 cd Program Files del *.exe /S /F 删除子目录下所有的.exe文件 rd abc /S 删除abc目录,包括里面的所有目录和文件
周小董
2019/03/25
1.4K0
如何使用 Python批量读取多个文件
可以看出,它会自动把你输入的内容打印出来,相当于在 whileTrue里面加上了 input。
青南
2019/09/16
10.5K0
点击加载更多

相似问题

从MemoryStream c#解压缩

10

解压缩和解压缩到MemoryStream

11

如何从byte[]转到MemoryStream,解压缩,然后写到FileStream

360

从MemoryStream保存多个png文件的C#

40

读取包含多个文件的MemoryStream

51
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文