c# .net gzip压缩源码

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c# .net gzip压缩源码相关的知识,希望对你有一定的参考价值。

你可以使用.net的GZipStream来实现。受以下版本支持:4.5、4、3.5、3.0、2.0
参考:
下面的示例演示如何使用 GZipStream 类压缩和解压缩文件目录。

using System;
using System.IO;
using System.IO.Compression;
namespace zip

public class Program

public static void Main()

string directoryPath = @"c:\\users\\public\\reports";
DirectoryInfo directorySelected = new DirectoryInfo(directoryPath);
foreach (FileInfo fileToCompress in directorySelected.GetFiles())

Compress(fileToCompress);

foreach (FileInfo fileToDecompress in directorySelected.GetFiles("*.gz"))

Decompress(fileToDecompress);


public static void Compress(FileInfo fileToCompress)

using (FileStream originalFileStream = fileToCompress.OpenRead())

if ((File.GetAttributes(fileToCompress.FullName) & FileAttributes.Hidden) != FileAttributes.Hidden & fileToCompress.Extension != ".gz")

using (FileStream compressedFileStream = File.Create(fileToCompress.FullName + ".gz"))

using (GZipStream compressionStream = new GZipStream(compressedFileStream, CompressionMode.Compress))

originalFileStream.CopyTo(compressionStream);
Console.WriteLine("Compressed 0 from 1 to 2 bytes.",
fileToCompress.Name, fileToCompress.Length.ToString(), compressedFileStream.Length.ToString());





public static void Decompress(FileInfo fileToDecompress)

using (FileStream originalFileStream = fileToDecompress.OpenRead())

string currentFileName = fileToDecompress.FullName;
string newFileName = currentFileName.Remove(currentFileName.Length - fileToDecompress.Extension.Length);
using (FileStream decompressedFileStream = File.Create(newFileName))

using (GZipStream decompressionStream = new GZipStream(originalFileStream, CompressionMode.Decompress))

decompressionStream.CopyTo(decompressedFileStream);
Console.WriteLine("Decompressed: 0", fileToDecompress.Name);





追问

错误 143 “System.IO.FileStream”并不包含“CopyTo”的定义
错误 144 “System.IO.Compression.GZipStream”并不包含“CopyTo”的定义
高手,是不是还需要哪个程序集?

追答

你使用的是什么版本的.net或是VS?
这个示例是MSDN上的。应该没问题。我使用的是VS2013。.net4.5

如果你不是这个版本也没有关系。不是说没有CopyTo吗,你可以替换掉这个方法。或不调用它,或改成别的同效果的函数。总之你使用的是它的压缩功能。不是它的示例。

追问

c#.net

追答

你的.net版本是多少,你的VS是多少版本。
只要你的.net版本在2.0以上应该就可以使用。只是属性方法什么的可能会有些不同。

给你个2.0的代码参考:
http://msdn.microsoft.com/zh-cn/library/zs4f0x23(v=vs.80).aspx

追问

代码gzip压缩后  图标是这样的吗?我压缩的是.txt文件

 

如果把.txt文件去掉,那么压缩文件里面.txt的文件后缀也没有了,应该是这样的吗?

追答

图标不重要,那是你机器上安装的可处理gzip的软件对应的图标。
重要的是能解开使用,比如再使用GZipStream能解开,或使用rar能打开就是可以的。

参考技术A 用开源的吧:ICSharpCode.SharpZipLib,给你链接
http://www.icsharpcode.net/OpenSource/SharpZipLib/Download.aspx追问

你好,我说的是.gzip压缩,不是.zip

追答

上面只是那个dll的名称,你应该点击下我给你的链接去看下说明:
#ziplib (SharpZipLib, formerly NZipLib) is a Zip, GZip, Tar and BZip2 library written entirely in C# for the .NET platform.

另外,如果你的目的只是在.net完全版下用,可以参考:
public static byte[] CompressData(byte[] data)

using (MemoryStream msOut = new MemoryStream())

GZipStream gzs = new GZipStream(msOut, CompressionMode.Compress, true);
gzs.Write(data, 0, data.Length);//压缩并写入内存
gzs.Close();
return msOut.ToArray();

追问

  高手,我对.gzip一点都不熟悉   y压缩后的图标是 这样的吗?

 双击打开后里面是

 

这样的

还是这样的?

 

指点一下吧,头都晕了

追答

文件一般是从其扩展名判断其类型(但扩展名也是可以随便改的,扩展名主要告诉系统该用什么软件打开这个文件才正确),至于显示的图标就更没关系了,你现在是用winrar关联打开,如果用其他软件则会显示其他图标。

以上是关于c# .net gzip压缩源码的主要内容,如果未能解决你的问题,请参考以下文章

GZIP 与 DEFLATE 压缩相比有啥优势?

如何使用 C# 下载和解压缩 gzip 文件?

C#实现通过Gzip来对数据进行压缩和解压

C# 解压缩工具类GZip

c# gzip压缩后,解压出来文件不能用了

gzip算法--JAVA成长之路