利用c#自带的类对文件进行压缩和解压处理
在做网络传输文件的小例子的时候,当传输的文件比较大的时候,我们通常都是将文件经过压缩之后才进行传输,以前都是利用第三方插件来对文件进行压缩的,但是现在我发现了c#自带的类库也能够实现文件的压缩,实际上是对数据的压缩吧,为什么说是对具体的数据经行压缩了,请看下面实现压缩的代码吧。
注意在用c#自带的类库实现文件压缩和解压的时候需要添加下面的引用:
using System.IO.Compression;
using System.IO;
压缩文件的代码如下:
/// <summary> ///压缩文件 /// </summary> /// <param name="filePath">需要被压缩文件的路径</param> private void FileCompression(string filePath) { StreamReader sr = new StreamReader(filePath); //读取出文件中的内容来。 string data=sr.ReadToEnd(); //压缩文件的后缀名可以随意起。 FileStream filedata = new FileStream("myCompression.mZP", FileMode.Create, FileAccess.Write); GZipStream zip = new GZipStream(filedata, CompressionMode.Compress); StreamWriter sw = new StreamWriter(zip); //将文件的内容写入到压缩的流当中 sw.Write(data); zip.Close(); sr.Close(); filedata.Close(); //关闭流一定要按照流的顺序来,否则会出现异常:无法访问已关闭的文件。 // zip.Close(); }
然后实现解压的代码与上面类似
解压文件的代码如下:
private void fileDeCompression() { //将以压缩的文件变为一个文件流 FileStream fileCompression = File.OpenRead("myCompression.mZP"); GZipStream gzp = new GZipStream(fileCompression, CompressionMode.Decompress); StreamReader sr = new StreamReader(gzp); //读取出解压后的数据 string data = sr.ReadToEnd(); MessageBox.Show(data); gzp.Close(); fileCompression.Close(); sr.Close(); }
通过使用上面的两个方法即可实现对文件或者是数据的压缩和解压。
使用自带的类也会存在一些缺点:无法对文件夹经行压缩。