使用 C# 对文件进行压缩和解压
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);
}
}
结果如下:

使用 C# 对文件进行压缩和解压的更多相关文章
- C#文件或文件夹压缩和解压方法(通过ICSharpCode.SharpZipLib.dll)
我在网上收集一下文件的压缩和解压的方法,是通过ICSharpCode.SharpZipLib.dll 来实现的 一.介绍的目录 第一步:下载压缩和解压的 ICSharpCode.SharpZipLib ...
- linux下文件加密压缩和解压的方法
一.用tar命令 对文件加密压缩和解压 压缩:tar -zcf - filename |openssl des3 -salt -k password | dd of=filename.des3 此命 ...
- java实现文件的压缩和解压
java实现文件的压缩和解压 代码压缩实现 package com.hjh.demo.zip; import java.io.BufferedInputStream; import java.io.F ...
- [Swift通天遁地]七、数据与安全-(9)文件的压缩和解压
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...
- 用jdk1.6的pack200和unpack200,对jar文件进行压缩和解压 .pack.gz
用jdk1.6的pack200和unpack200,对jar文件进行压缩和解压 解压xxx.jar.pack.gz为xxx.jar:unpack200 -r xxx.jar.pack.gz xxx.j ...
- C#文件或文件夹压缩和解压
C#文件或文件夹压缩和解压方法有很多,本文通过使用ICSharpCode.SharpZipLib.dll来进行压缩解压 1.新建一个winform项目,选择项目右键 管理NuGet程序包,搜索ICSh ...
- gz文件的压缩和解压
gz文件的压缩和解压 压缩: gzip filename 解压: gunzip filename.gz
- 【C#公共帮助类】WinRarHelper帮助类,实现文件或文件夹压缩和解压,实战干货
关于本文档的说明 本文档使用WinRAR方式来进行简单的压缩和解压动作,纯干货,实际项目这种压缩方式用的少一点,一般我会使用第三方的压缩dll来实现,就如同我上一个压缩类博客,压缩的是zip文件htt ...
- 利用c#自带的类对文件进行压缩和解压处理
在做网络传输文件的小例子的时候,当传输的文件比较大的时候,我们通常都是将文件经过压缩之后才进行传输,以前都是利用第三方插件来对文件进行压缩的,但是现在我发现了c#自带的类库也能够实现文件的压缩,实际上 ...
- ZIP文件流压缩和解压
前面写了一篇文章 "ZIP文件压缩和解压", 介绍了" SharpZipLib.Zip " 的使用, 最近的项目中,在使用的过程中, 遇到一些问题. 比如, 现 ...
随机推荐
- 修改ubuntu按下关机键触发的事件
gsettings set org.gnome.settings-daemon.plugins.power button-power shutdown will change your the beh ...
- asp.net2.0 国际化
公司业务需要在国外开展了, 因此以前的系统要做多国语言了, 从网上搜集了好多资料, 最后选择了一个比较简单的方案 1. 打开vs2005, 新建网站, 首先在配置文件中添加配置: <syste ...
- 【Qt】Qt之重启应用程序【转】
简介 今天分享的内容有些意思-如何重启一个应用程序.其实,有时候这是一个很重要的功能点,而且很人性化.易用性很好. 例如:切换用户.当某个用户登录成功之后,需要切换到其它账号,那么这时,你就知道它的重 ...
- 为什么要用ajax
Ajax应用程序的优势在于:1. 通过异步模式,提升了用户体验2. 优化了浏览器和服务器之间的传输,减少不必要的数据往返,减少了带宽占用3. Ajax引擎在客户端运行,承担了一部分本来由服务器承担的工 ...
- 有关Mysql连接问题
问题一——Mysql number Error 2003 MySQL连接错误.错误代码10061.10061一般是Mysql服务没启动.或Mysql服务器无法连接 . 在程序栏找到Mysql\Mysq ...
- java 高精度
package BigDecimal; import java.math.BigDecimal; import java.lang.Object; public class BigDecimalTes ...
- DataSnap中连接池的应用
当开发人员开始创建Delphi的DataSnap应用时很常见的数据库连接定义方式是每个数据模块建立一个连接.这样做将产生大量的数据库连接,并产生很多问题.从Delphi XE开始,EMB提供了Sess ...
- Docs list
http://www.deansys.com/doc/ldd3/index.html Github中文文档: http://www.worldhello.net/gotgithub/03-projec ...
- WPF与DevExpress之旅-序言
随着.NET技术的发展,从之前的WINFORM转向到WPF是我们技术改革的必然趋势.WPF能给人带来震撼的视觉体验,也能更加规范我们的开发模式,与传统的WINFORM开发来说具有革命性的意义.DevE ...
- javascript 柯里化
先看一下代码 function add(){ var sum=0; for(var i=0;i<arguments.length;i++){ sum+=arguments[i]; } retur ...