使用 C# 对文件进行压缩和解压

C#中对文件压缩和可以使用两个类:

  1. GZipStream 类

此实例分为几个模块,分别为:

压缩函数:

    /// <summary>
        /// 压缩文件
        /// </summary>
        /// <param name="filename"></param>
        /// <param name="charData"></param>
        static void SaveCompressedFiles(string filename,string strinput)  //这里不能使用 char[] 数组,因为输入的字符串的长度是不可知的
        {
            FileStream fs = new FileStream(filename, FileMode.OpenOrCreate, FileAccess.Write);

            //两个参数分别为:1:要压缩或解压缩的流,  2:用于指示压缩还是解压缩流的枚举值之一。
            GZipStream gzs = new GZipStream(fs, CompressionMode.Compress);    //将流中的文件信息进行压缩
            StreamWriter sw = new StreamWriter(gzs);  //将压缩后的流 写入到文件中
            sw.Write(strinput);
            sw.Close();
        }

解压函数:

 /// <summary>
        /// 解压文件
        /// </summary>
        /// <param name="filename"></param>
        /// <returns></returns>
        static string  LoadCompressedFiles(string filename)
        {
            FileStream fileStream = new FileStream(filename, FileMode.Open, FileAccess.Read);  //将文件读进流
            GZipStream gzipSream = new GZipStream(fileStream, CompressionMode.Decompress); //解压基础流

            StreamReader sr = new StreamReader(gzipSream);
            string data = sr.ReadToEnd();  //从当前位置一直读到流的最后
            return data;
        }

输出压缩后的长度函数:

   /// <summary>
        /// 输出压缩后的长度
        /// </summary>
        /// <param name="inputstring"></param>
        static void PrintfCompressedLenth(string inputstring)
        {
            SaveCompressedFiles("test.txt", inputstring);

            FileInfo fi = new FileInfo("test.txt");

            long lenth = fi.Length;

            Console.WriteLine("压缩后的长度为:{0}", lenth);
        }

输出源的长度函数:

    /// <summary>
        /// 输出源的长度
        /// </summary>
        static void PrintSourceLenth()
        {
            string strOutput = LoadCompressedFiles("test.txt");
            StreamWriter sw = new StreamWriter("temp.txt");
            sw.Write(strOutput);
            sw.Close(); //必须关闭,否则下面的无法访问


            FileStream fileS = new FileStream("temp.txt", FileMode.Open);
            StreamReader sr = new StreamReader(fileS);

            string line = sr.ReadLine();

            Console.WriteLine("解压后的长度为:{0}", line.Length);
        }

获得用户输入的字符串数据函数:

        /// <summary>
        /// 获得用户输入的字符串数据
        /// </summary>
        /// <returns></returns>
        static string UserInputString()
        {
            Console.Write("请输入一个字符串:");
            string str = Console.ReadLine();
            StringBuilder strBuilder = new StringBuilder(str);
            for (int i = 0; i < 10; i++)   //将字符串复制10次,注意这里是呈指数级别增加的
            {
                strBuilder.Append(strBuilder);
            }
            Console.WriteLine("压缩前的长度为:{0}", strBuilder.Length);
            return strBuilder.ToString();
        }

Main函数:

        static void Main(string[] args)
        {
            try
            {      
                //获取用户输入的字符串
                string strInput = UserInputString();

                //调用函数输出压缩后的长度
                PrintfCompressedLenth(strInput);

                //调用函数  输出解压后(源文件)的文件长度
                PrintSourceLenth();
            }
            catch (System.Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }

结果如下:

原文地址:https://www.cnblogs.com/TangPro/p/3230373.html