• 使用 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);
                }
            }

    结果如下:

  • 相关阅读:
    iOS 国际化
    iOS iOS7 20px 处理
    iOS 导航栏
    android Tab =viewpager+fragmnet
    Android fragment 想activity 传送数据
    sass sublime text 2 gulp ionic
    HTML5 Notification消息通知
    浅谈设备分辨比
    offsetwidth/clientwidth的区别
    移动端网页布局中需要注意事项以及解决方法总结
  • 原文地址:https://www.cnblogs.com/TangPro/p/3230373.html
Copyright © 2020-2023  润新知