日期:2014-05-19  浏览次数:20790 次

C# 文件压缩问题
本人使用微软提供的GZipStream类进行文件压缩,但是发现有的文件压缩出来比原文件还要大,这怎么能用啊。请问谁能解决这个问题。

------解决方案--------------------
我这里有一个标准GZIP库,把你的邮件说下,我给你发过去。

以下是使用方法:

using System;
using System.IO;

using ICSharpCode.SharpZipLib.GZip;

class MainClass
{
public static void Main(string[] args)
{
if (args[0] == "-d ")
{ // 解压
Stream s = new GZipInputStream(File.OpenRead(args[1]));
//生成一个GZipInputStream流,用来打开压缩文件。
//因为GZipInputStream由Stream派生,所以它可以赋给Stream。
//它的构造函数的参数是一个表示要解压的压缩文件所代表的文件流
char[] myChar = { '. ', 'g ', 'z '};
FileStream fs = File.Create(Path.GetFileNameWithoutExtension( "bak " + args[1].TrimEnd(myChar)));
//生成一个文件流,它用来生成解压文件
//可以使用System.IO.File的静态函数Create来生成文件流
int size = 2048;//指定压缩块的大小,一般为2048的倍数
byte[] writeData = new byte[size];//指定缓冲区的大小
while (true)
{
size = s.Read(writeData, 0, size);//读入一个压缩块
if (size > 0)
{
fs.Write(writeData, 0, size);//写入解压文件代表的文件流
}
else
{
break;//若读到压缩文件尾,则结束
}
}
s.Close();
}
else
{ // 压缩
Stream s = new GZipOutputStream(File.Create(args[0] + ".gz "));
//生成一个GZipOutputStream流,用来生成压缩文件。
//因为GZipOutputStream由Stream派生,所以它可以赋给Stream。
FileStream fs = File.OpenRead(args[0]);
//生成一个文件流,它用来打开要压缩的文件
//可以使用System.IO.File的静态函数OpenRead来生成文件流
byte[] writeData = new byte[fs.Length];
//指定缓冲区的大小
fs.Read(writeData, 0, (int)fs.Length);
//读入文件
s.Write(writeData, 0, writeData.Length);
//写入压缩文件
s.Close();
//关闭文件
}
}
}