• 文件的压缩与解压


            #region[解压文件]
            /// <summary>
            /// 解压文件
            /// </summary>
            /// <param name="zipFileName">zip文件路径+zip文件名称</param>
            /// <param name="targetDirectory">解压后文件保存路径</param>
            /// <param name="fileFilter">解压zip文件中指定文件,若为null,则对解压后的文件不做筛选</param>
            /// <returns></returns>
            public static Boolean ExtractZip(string zipFileName, string targetDirectory, string fileFilter)
            {
                try
                {
                    //FastZip 添加引用 ICSharpCode.SharpZipLib.Zip;
                    FastZip fastZip = new FastZip();
                    fastZip.ExtractZip(zipFileName, targetDirectory, fileFilter);
                    return true;
                }
                catch
                {
                    return false;
                }
            }
    
            //解压zip文件中某个指定文件
            public void DeCompressOne()
            {
                string zipFileName = @"E:20190903测试文件测试.zip";//zip文件路径+zip文件名
                string subPath = @"E:20190903非zip文件" + DateTime.Now.ToString("yyyyMMddhhmmss");
                string fileFilter = "测试.txt";
                System.IO.Directory.CreateDirectory(subPath);//创建文件夹,保存解压后的文件
                string targetDirectory = subPath;//解压后文件保存路径
                Boolean bl = ExtractZip(zipFileName, targetDirectory, fileFilter);
            }
    
            // 解压zip文件
            protected void DeCompress()
            {
                string zipFileName = @"E:20190903测试文件测试.zip";//zip文件路径+zip文件名
                string subPath = @"E:20190903非zip文件" + DateTime.Now.ToString("yyyyMMddhhmmss");
                System.IO.Directory.CreateDirectory(subPath);//创建文件夹,保存解压后的文件
                string targetDirectory = subPath;//解压后文件保存路径
                Boolean bl = ExtractZip(zipFileName, targetDirectory, null);
            }
    
            #endregion
    
            #region[压缩文件]
            /// <summary>
            /// 压缩文件
            /// </summary>
            /// <param name="zipFileName">zip文件保存路径+zip文件名称</param>
            /// <param name="sourceDirectory">压缩来源文件路径</param>
            /// <param name="recurse"></param>
            /// <param name="fileFilter">压缩文件夹中指定文件,若为null,则压缩文件夹中所有的文件</param>
            /// <returns></returns>
            public static Boolean CreateZip(string zipFileName, string sourceDirectory, bool recurse, string fileFilter)
            {
                try
                {
                    //FastZip 添加引用 ICSharpCode.SharpZipLib.Zip;
                    FastZip fastZip = new FastZip();
                    fastZip.CreateZip(zipFileName, sourceDirectory, recurse, fileFilter);
                    return true;
                }
                catch
                {
                    return false;
                }
            }
    
            //压缩一个文件
            protected void CompressOne()
            {
                string subPath = @"E:20190903zip文件" + DateTime.Now.ToString("yyyyMMddhhmmss");
                System.IO.Directory.CreateDirectory(subPath);//创建文件夹,保存压缩后的文件
                string zipFileName = subPath + @"测试.zip";//压缩文件路径+压缩文件名(压缩文件名可以自定义)
                string sourceDirectory = @"E:20190903测试文件";
                string fileFilter = @"测试.txt";
                Boolean bl = CreateZip(zipFileName, sourceDirectory, false, fileFilter);
            }
    
            // 压缩一个文件夹
            protected void Compress()
            {
                string subPath = @"E:20190903zip文件" + DateTime.Now.ToString("yyyyMMddhhmmss");
                System.IO.Directory.CreateDirectory(subPath);//创建文件夹,保存压缩后的文件
                string zipFileName = subPath + @"测试.zip";//压缩文件路径+压缩文件名(压缩文件名可以自定义)
                string sourceDirectory = @"E:20190903测试文件";
                Boolean bl = CreateZip(zipFileName, sourceDirectory, true, null);
            }
            #endregion
    
            #region[文件流的解压与压缩]
    
            #region[Way1]
            public static void Way1()
            {
                //压缩文件流
                string str = "文件流的压缩与解压相关代码";
                //使用FileStream 要添加引用  System.IO;
                FileStream fs = File.OpenWrite(@"E:20190903测试文件内存流处理.txt");//  打开一个现有文件或创建一个新文件以进行写入。(用于保存压缩的byte数组)
                //使用GZipStream 要添加引用 System.IO.Compression;  (GZipStream 提供用于压缩和解压缩流的方法和属性。提供用于压缩和解压缩流的方法和属性。)
                GZipStream zipStream = new GZipStream(fs, CompressionMode.Compress);//CompressionMode.Compress:将压缩的基础流。
                //使用Encoding 要添加引用:System.Text
                byte[] bytes = Encoding.UTF8.GetBytes(str);
                zipStream.Write(bytes, 0, bytes.Length);//从指定的字节数组中将压缩的字节写入基础流。
                zipStream.Close();
                fs.Close();
    
                //解压文件流
                FileStream fs2 = File.OpenRead(@"E:20190903测试文件内存流处理.txt");//打开现有文件以进行读取。(txt文件保存的是byte数组)
                GZipStream zipStream2 = new GZipStream(fs2, CompressionMode.Decompress);//CompressionMode.Decompress:解压缩基础流。
                FileStream fs3 = File.OpenWrite(@"E:20190903测试文件内存流处理2.txt");//  打开一个现有文件或创建一个新文件以进行写入。(用于保存压缩的byte数组)
                int bytesRead;
                while ((bytesRead = zipStream2.Read(bytes, 0, bytes.Length)) > 0) //将若干解压缩的字节读入指定的字节数组。
                {
                    fs3.Write(bytes, 0, bytesRead);
                }
                fs3.Close();
                zipStream2.Close();
                fs2.Close();
            }
            #endregion
    
            #region[Way2]
            public  static void Way2()
            {
                //压缩文件流(使用using(){} 关闭和释放不需要手动操作)
                string str = "文件流的压缩与解压相关代码2";
                using (FileStream fs = File.OpenWrite(@"E:20190903测试文件内存流处理.txt"))
                {
                    using (GZipStream zipStream = new GZipStream(fs, CompressionMode.Compress))
                    {
                        byte[] bytes = Encoding.UTF8.GetBytes(str);
                        zipStream.Write(bytes, 0, bytes.Length);
                    }
                }
    
                //解压文件流(使用using(){} 关闭和释放不需要手动操作)
                using (FileStream fs = File.OpenRead(@"E:20190903测试文件内存流处理.txt"))
                {
                    using (GZipStream zipStream = new GZipStream(fs, CompressionMode.Decompress))
                    {
                        using (FileStream fs1 = File.OpenWrite(@"E:20190903测试文件内存流处理2.txt"))
                        {
                            int bytesRead;
                            byte[] bytes = new byte[1024];
                            while ((bytesRead = zipStream.Read(bytes, 0, bytes.Length)) > 0)
                            {
                                fs1.Write(bytes, 0, bytesRead);
                            }
                        }
                    }
                }
    
            }
            #endregion
    
            #region[Way3]
            public static void Way3()
            {
                string testdata = "GZip压缩和解压";
    
                //压缩
                byte[] gzipdata = CompressGZip(Encoding.UTF8.GetBytes(testdata));
    
                //解压
                byte[] undata = UnGZip(gzipdata);
                var pp = Encoding.UTF8.GetString(undata);
            }
    
            //压缩文件
            public static byte[] CompressGZip(byte[] rawData)
            {
                //MemoryStream需要添加引用  System.IO;
                MemoryStream ms = new MemoryStream();
                //GZipOutputStream要添加引用  ICSharpCode.SharpZipLib.GZip
                GZipOutputStream compressedzipStream = new GZipOutputStream(ms);
                compressedzipStream.Write(rawData, 0, rawData.Length);
                compressedzipStream.Close();
                return ms.ToArray();
            }
    
            //解压文件
            public static byte[] UnGZip(byte[] byteArray)
            {
                //MemoryStream需要添加引用  System.IO;
                MemoryStream re = new MemoryStream();
                //GZipOutputStream要添加引用  ICSharpCode.SharpZipLib.GZip
                GZipInputStream gzi = new GZipInputStream(new MemoryStream(byteArray));
                int count;
                byte[] data = new byte[1024];
                while ((count = gzi.Read(data, 0, data.Length)) != 0)
                {
                    re.Write(data, 0, count);
                }
                byte[] overarr = re.ToArray();
                return overarr;
            }
            #endregion
            #endregion
    

      

  • 相关阅读:
    值得收藏的十二条Jquery随身笔记
    都来中大奖啦~双色球随机算法!
    巧妙使用div+css模拟表格对角线
    介绍两个非常好用的Javascript内存泄漏检测工具
    JQuery模仿淘宝天猫魔盒抢购页面倒计时效果
    JQuery巧妙利用CSS操作打印样式
    boost编译随笔
    Dev-C++安装第三方库boost
    比特币源码分析--C++11和boost库的应用
    QT +go 开发 GUI程序
  • 原文地址:https://www.cnblogs.com/suflowers1700218/p/11527009.html
Copyright © 2020-2023  润新知