使用 C# 对文件进行压缩和解压
2024-10-18 04:50:14
C#中对文件压缩和可以使用两个类:
- 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 = ; i < ; 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);
}
}
结果如下:
最新文章
- Struts2入门(五)——OGNL和标签库
- ABP源码分析六:依赖注入的实现
- 深入浅出UML类图(一)
- [原 ->; 砖] C# IEnumerable<;T>;泛型取值
- DQL_数据查询语言
- jQuery CSS 添加/删除类名
- PHP获取图片颜色值,检测图片主要颜色的代码:
- Java、PHP训练场地选择成都传祺播客
- html + CSS
- 【转】CSS中position属性( absolute | relative | static | fixed )详解
- 编写Linux/Unix守护进程
- Gulp安装流程、使用方法及cmd常用命令导览
- vs2012中使用localdb实例还原一个sql server 2008r2版本的数据库
- 2018开源中国最受欢迎的中国软件MyBatis-Plus
- Android图片采样缩放
- 安卓Android基础第三天——数据库,ListView
- 测试那些事儿—软测必备的Linux知识(一)
- SharePoint Framework 企业向导(三)
- Oracle 11G 安装图文教程
- 2017 计蒜之道 初赛 第五场 B. UCloud 的安全秘钥(简单)