zoukankan      html  css  js  c++  java
  • 文件的压缩与解压

            #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
    

      

  • 相关阅读:
    POJ 2018 二分
    873. Length of Longest Fibonacci Subsequence
    847. Shortest Path Visiting All Nodes
    838. Push Dominoes
    813. Largest Sum of Averages
    801. Minimum Swaps To Make Sequences Increasing
    790. Domino and Tromino Tiling
    764. Largest Plus Sign
    Weekly Contest 128
    746. Min Cost Climbing Stairs
  • 原文地址:https://www.cnblogs.com/suflowers1700218/p/11527009.html
Copyright © 2011-2022 走看看