c#打包文件解压缩

首先要引用一下类库:using Ionic.Zip;这个类库可以到网上下载。

下面对类库使用的封装方法:

/// <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,"imges");
                            }
                        }
                        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;
                }
            }

时间: 2024-10-11 16:04:39

c#打包文件解压缩的相关文章

第六节 文件打包与解压缩

一.文件打包和解压缩 在 Windows 上我们最常见的不外乎这三种*.zip,*.rar,*.7z后缀的压缩文件 而在 Linux 上面常见常用的除了以上这三种外,还有*.gz,*.xz,*.bz2,*.tar,*.tar.gz,*.tar.xz,*tar.bz2,简单介绍如下 其中zip,rar,tar最为重要.下面会依次介绍这几个命令及对应的解压命令 1.zip压缩打包程序 使用zip打包文件夹: 上面命令将 shiyanlou 的 home 目录打包成一个文件,并查看了打包后文件的大小和

Linux下文件的打包、解压缩指令——tar,bzip2

本文是对 鸟叔的Linux私房菜(基础学习篇) 第三版 的学习笔记,原文可参考原书中文网站 鸟叔的Linux私房菜. 在Linux环境下,对于文件的操作更多通过命令行指令而不是单纯的鼠标点击,而文件管理中一个重要的操作便是压缩和加压操作.通过文件的压缩和解压,可以使得文件占用更少的存储空间,也可以让文件传输更加便捷.本文主要介绍Linux下常用的打包指令和解压缩指令,并介绍不同的压缩文件拓展名的区别. 文件后缀的含义 随着压缩技术的发展,Linux环境下提供的压缩指令和格式开始变多.为了便于用户

1.6文件打包与解压缩(学习过程)

实验介绍 Linux 上常用的 压缩/解压 工具,介绍了 zip,rar,tar 的使用. 一.文件打包和解压缩 在讲 Linux 上的解压缩工具之前,有必要先了解以下常见常用的压缩包文件格式.在 Windows 上我们最常见的不外乎这三种*.zip,*.rar,*.7z后缀的压缩文件,而在 Linux 上面常见常用的除了以上这三种外,还有*.gz,*.xz,*.bz2,*.tar,*.tar.gz,*.tar.xz,*tar.bz2,简单介绍如下: 文件后缀名 说明 *.zip zip程序打包

linux——文件打包与解压缩

在讲 Linux 上的压缩工具之前,有必要先了解一下常见常用的压缩包文件格式.在 Windows 上最常见的不外乎这三种 *.zip,*.rar,*.7z 后缀的压缩文件.而在 Linux 上面常见的格式除了以上三种外,还有 *.gz,*.xz,*.bz2,*.tar,*.tar.gz,*.tar.xz,*.tar.bz2,简单介绍如下: 文件后缀名 说明 *.zip zip 程序打包压缩的文件 *.rar rar 程序压缩的文件 *.7z 7zip 程序压缩的文件 *.tar tar 程序打包

环境变量和文件查找&amp;文件打包与解压缩

环境变量和文件查找 介绍环境变量的作用与用法 及几种搜索文件的方法 学会这些技巧可以高效地使用 Linux 知识点:环境变量的设置 环境变量的修改 环境变量 要解释环境变量,得先明白变量是什么,准确的说应该是 Shell 变量,所谓变量就是计算机中用于记录一个值(不一定是数值,也可以是字符或字符串)的符号,而这些符号将用于不同的运算处理中,通常变量与值是一对一的关系,可以通过表达式读取它的值并赋值给其它变量,也可以直接指定数值赋值给任意变量.为了便于运算和处理,大部分的编程语言会区分变量的类型,

linux下打包文件或文件夹

转自:    在linux下如何将文件夹打包                 http://blog.csdn.net/cynhafa/article/details/7303338 linux zip压缩.压缩当前文件夹下所有文件,压缩为a.zip.命令行的方法是怎样. zip  -r fileName.zip  文件夹名 tar tar命令可以用来压缩打包单文件.多个文件.单个目录.多个目录. 常用格式: 单个文件压缩打包 tar czvf my.tar file1 多个文件压缩打包 tar

【转】C#打包文件夹成zip格式

原文地址 C#打包文件夹成zip格式(包括文件夹和子文件夹下的所有文件)C#打包zip文件可以调用现成的第三方dll,事半功倍,而且该dll完全免费,下载地址:SharpZipLib下载完解压缩后,把 ICSharpCode.SharpZipLib.dll 拷贝到当前项目的目录下(如果偷懒的话,可以直接拷贝到当前项目的bin\Debug目录下),在VS打开的项目引用上右键添加引用 ICSharpCode.SharpZipLib.dll然后,在VS打开的项目上右键新建一个类,命名为 ZipHelp

Linux文件解压缩详解-转

linux zip命令 1.zip -r myfile.zip ./*将当前目录下的所有文件和文件夹全部压缩成myfile.zip文件,-r表示递归压缩子目录下所有文件. 2.unzipunzip -o -d /home/sunny myfile.zip把myfile.zip文件解压到 /home/sunny/-o:不提示的情况下覆盖文件:-d:-d /home/sunny 指明将文件解压缩到/home/sunny目录下: 3.其他zip -d myfile.zip smart.txt删除压缩文

Linux打包压缩解压缩tar、gzip、bzip2

压缩与解压 1 gzip gzip test.py     #压缩后为test.py.gz gzip -d test.py.gz   #解压文件 2 bzip2 bzip2 test.py     #压缩后为test.py.bz2 bzip2 -d test.py.gz   #解压文件 3 tar 选项内容 -c     创建打包文件 -r     追加文件到打包文档 -t     列出打包内容 -f     指定打包名 -j     打包后通过bzip2格式压缩 -z     打包后通过gzi