C#操作Zip

Zip格式是开源的压缩格式,在.NET4.0下微软只提供了gzip的相关操作类,在.NET4.5之后才直接提供了操作Zip的类。

 

在4.0之前想要操作Zip只有借鉴第三方的类库,比较著名的是:ShareZipLib。

 

直接解压与压缩Zip的操作比较简单,这里小猪分享的是在不解压所有文件的情况下只解压Zip包中的文件

情况一:知道Zip包中有某文件且知道在什么地方,解压Zip包中特定文件。

情况二:不知道文件在Zip包中的位置,需求搜索。

 

先在项目中引用第三方类库

 

在类代码前面插入对类库的引用:

using ICSharpCode.SharpZipLib.Zip;
using ICSharpCode.SharpZipLib.Core;

编写对应的代码:

            ZipInputStream zis = new ZipInputStream(System.IO.File.Open(integralName, FileMode.Open));
 
            ZipEntry entry = zis.GetNextEntry();
 
            while (entry != null)
            {//这里是情况二
                #region 搜索 search.png
                if (entry.Name.Contains("search.png")) 
                {
                    FileStream writer = System.IO.File.Create(this.Request.PhysicalApplicationPath + "/Zips/" + datetime + "search.png"); 
//解压后的文件
 
                        int bufferSize = 1024 * 2; //缓冲区大小
                        int readCount = 0; //读入缓冲区的实际字节
                        byte[] buffer = new byte[bufferSize];
                        readCount = zis.Read(buffer, 0, bufferSize);
                        while (readCount > 0)
                        {
                            writer.Write(buffer, 0, readCount);
                            readCount = zis.Read(buffer, 0, bufferSize);
                        }
                        writer.Close();
                        writer.Dispose();
                }
                #endregion
                entry = zis.GetNextEntry();
            }
            zis.Close();
            zis.Dispose();
 
            using (FileStream fs = new FileStream(integralName, FileMode.Open, FileAccess.Read))
            using (ZipFile zf = new ZipFile(fs))
            {
                var ze = zf.GetEntry("face.png");//情况一
                if (ze == null)
                {
                }
                else
                {
                    #region 指定 face.png
                    using (var s = zf.GetInputStream(ze))
                    {
                        FileStream writer = System.IO.File.Create(this.Request.PhysicalApplicationPath + "/Zips/" + datetime + "face.png"); //解压后的文件
 
                        int bufferSize = 1024*2; //缓冲区大小
                        int readCount = 0; //读入缓冲区的实际字节
                        byte[] buffer = new byte[bufferSize];
                        readCount = s.Read(buffer, 0, bufferSize);
                        while (readCount > 0)
                        {
                            writer.Write(buffer, 0, readCount);
                            readCount = s.Read(buffer, 0, bufferSize);
                        }
 
                        writer.Close();
                        writer.Dispose();
 
                        // do something with ZipInputStream
                    }
                    #endregion
                }
            }

 

 

转载于:https://www.cnblogs.com/smallerpig/p/3646122.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值