zoukankan      html  css  js  c++  java
  • 使用 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);
                }
            }

    结果如下:

  • 相关阅读:
    cocos日记
    Android 开发经验
    vbs自学备份
    C# 如何在winform中嵌入Excel,内嵌Excel,word
    win7 64位在线编辑dsoframer控件的安装和使用配置
    C# 正则表达式 最全的验证类
    在 Range 对象中,Min (14)必须小于或等于 max (-1)。
    winform Form窗体和UserControl用户空间嵌入Panel容器并填充
    C# Winform防止闪频和再次运行
    Base64编码解码
  • 原文地址:https://www.cnblogs.com/TangPro/p/3230373.html
Copyright © 2011-2022 走看看