LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

C#使用DotNetZip封装类操作zip文件(创建/读取/更新)实例

admin
2024年1月19日 19:57 本文热度 629
DotnetZip是一个开源类库,支持.NET的任何语言,可很方便的创建,读取,和更新zip文件。而且还可以使用在.NETCompact Framework中。 

下载地址在这里:附件:DotNetZip.rar

解压后放到主程序同一个目录下,引用Ionic.Zip.dll就可以了:

然后引用这个命名空间:

using Ionic.Zip;

以下是我自己封装的一个类:

    /// <summary>

    /// Zip操作基于 DotNetZip 的封装

    /// </summary>

    public static class ZipUtils

    {

        /// <summary>

        /// 得到指定的输入流的ZIP压缩流对象【原有流对象不会改变】

        /// </summary>

        /// <param name="sourceStream"></param>

        /// <returns></returns>

        public static Stream ZipCompress(Stream sourceStream, string entryName = "zip")

        {

            MemoryStream compressedStream = new MemoryStream();

            if (sourceStream != null)

            {

                long sourceOldPosition = 0;

                try

                {

                    sourceOldPosition = sourceStream.Position;

                    sourceStream.Position = 0;

                    using (ZipFile zip = new ZipFile())

                    {

                        zip.AddEntry(entryName, sourceStream);

                        zip.Save(compressedStream);

                        compressedStream.Position = 0;

                    }

                }

                catch

                {

                }

                finally

                {

                    try

                    {

                        sourceStream.Position = sourceOldPosition;

                    }

                    catch

                    {

                    }

                }

            }

            return compressedStream;

        }

 

        /// <summary>

        /// 得到指定的字节数组的ZIP解压流对象

        /// 当前方法仅适用于只有一个压缩文件的压缩包,即方法内只取压缩包中的第一个压缩文件

        /// </summary>

        /// <param name="sourceStream"></param>

        /// <returns></returns>

        public static Stream ZipDecompress(byte[] data)

        {

            Stream decompressedStream = new MemoryStream();

            if (data != null)

            {

                try

                {

                    MemoryStream dataStream = new MemoryStream(data);

                    using (ZipFile zip = ZipFile.Read(dataStream))

                    {

                        if (zip.Entries.Count > 0)

                        {

                            zip.Entries.First().Extract(decompressedStream);

                            // Extract方法中会操作ms,后续使用时必须先将Stream位置归零,否则会导致后续读取不到任何数据

                            // 返回该Stream对象之前进行一次位置归零动作

                            decompressedStream.Position = 0;

                        }

                    }

                }

                catch

                {

                }

            }

            return decompressedStream;

        }

        /// <summary>

        /// 压缩ZIP文件

        /// 支持多文件和多目录,或是多文件和多目录一起压缩

        /// </summary>

        /// <param name="list">待压缩的文件或目录集合</param>

        /// <param name="strZipName">压缩后的文件名</param>

        /// <param name="IsDirStruct">是否按目录结构压缩</param>

        /// <returns>成功:true/失败:false</returns>

        public static bool CompressMulti(List<string> list, string strZipName, bool IsDirStruct)

        {

            try

            {

                using (ZipFile zip = new ZipFile(Encoding.Default))//设置编码,解决压缩文件时中文乱码

                {

                    foreach (string path in list)

                    {

                        string fileName = Path.GetFileName(path);//取目录名称

                        //如果是目录

                        if (Directory.Exists(path))

                        {

                            if (IsDirStruct)//按目录结构压缩

                            {

                                zip.AddDirectory(path, fileName);

                            }

                            else//目录下的文件都压缩到Zip的根目录

                            {

                                zip.AddDirectory(path);

                            }

                        }

                        if (File.Exists(path))//如果是文件

                        {

                            zip.AddFile(path);

                        }

                    }

                    zip.Save(strZipName);//压缩

                    return true;

                }

            }

            catch (Exception)

            {

                return false;

            }

        }

        /// <summary>

        /// 解压ZIP文件

        /// </summary>

        /// <param name="strZipPath">待解压的ZIP文件</param>

        /// <param name="strUnZipPath">解压的目录</param>

        /// <param name="overWrite">是否覆盖</param>

        /// <returns>成功:true/失败:false</returns>

        public static bool Decompression(string strZipPath, string strUnZipPath, bool overWrite)

        {

            try

            {

                ReadOptions options = new ReadOptions();

                options.Encoding = Encoding.Default;//设置编码,解决解压文件时中文乱码

                using (ZipFile zip = ZipFile.Read(strZipPath, options))

                {

                    foreach (ZipEntry entry in zip)

                    {

                        if (string.IsNullOrEmpty(strUnZipPath))

                        {

                            strUnZipPath = strZipPath.Split('.').First();

                        }

                        if (overWrite)

                        {

                            entry.Extract(strUnZipPath, ExtractExistingFileAction.OverwriteSilently);//解压文件,如果已存在就覆盖

                        }

                        else

                        {

                            entry.Extract(strUnZipPath, ExtractExistingFileAction.DoNotOverwrite);//解压文件,如果已存在不覆盖

                        }

                    }

                    return true;

                }

            }

            catch (Exception)

            {

                return false;

            }

        }

    }

使用方法:

1.压缩文件

List<string> list = new List<string>();
list.Add(@"D:\Test\ss");
list.Add(@"D:\Test\test1.jpg");
list.Add(@"D:\公司文件.txt");
list.Add(@"D:\Test\ss.xml");
bool isSuc =ZipUtils. CompressMulti(list, "D:\\Test2.zip",true);

2.解压文件

bool isSuc = ZipUtils.Decompression("D:\\Test\\Test1.zip", "D:\\Teest", true);

该文章在 2024/1/19 21:29:48 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2024 ClickSun All Rights Reserved