C#如何实现zlib压缩和解压缩?

linchenrr 2011-01-05 06:41:44
注意不是GZip或Zip之类的,是zlib,需要和flash的zlib算法胡同。 SharpZipLib,不支持这个,试过zlib.NET,压缩可以 但是解压缩某些特定的文件时出来的字节不对,貌似有bug,请问还有没有C#的zlib库? 或者是我的代码有什么问题吗?




String path = @"C:\\1.xls";
FileStream fs = File.Open(path, FileMode.Open, FileAccess.Read);
FileStream output;

Byte[] bytes;



if (compress)
{
//压缩
bytes = new Byte[fs.Length];
fs.Read(bytes, 0, bytes.Length);

fs.Close();
fs.Dispose();

output = new FileStream(path, FileMode.Create, FileAccess.ReadWrite);


ZOutputStream zOut = new ZOutputStream(output, zlibConst.Z_DEFAULT_COMPRESSION);
zOut.Write(bytes, 0, bytes.Length);
zOut.finish();
zOut.Close();
}
else
{
//解压缩
bytes = new Byte[0];

ZInputStream zIn = new ZInputStream(fs);

int curPosition=0;

Byte[] data = new Byte[4096];

while (true)
{
int size = zIn.Read(data, 0, data.Length);
if (size > 0)
{
curPosition += size;
Byte[] tempBytes = new Byte[bytes.LongLength + data.Length];

bytes.CopyTo(tempBytes, 0);
data.CopyTo(tempBytes, bytes.LongLength);

bytes = tempBytes;

}
else
{
break;
}
}


fs.Close();
fs.Dispose();

output = new FileStream(path, FileMode.Create, FileAccess.ReadWrite);

output.Write(bytes, 0, curPosition);
output.Flush();

}

output.Close();
output.Dispose();
...全文
797 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
linchenrr 2011-01-06
  • 打赏
  • 举报
回复
继续求解。。。
linchenrr 2011-01-06
  • 打赏
  • 举报
回复
快帮忙看看
小童 2011-01-06
  • 打赏
  • 举报
回复
留名,等会看,
xuld 2011-01-05
  • 打赏
  • 举报
回复
C#常用代码集合库 - 功能完整|效率高速|文档丰富


里面内置 Zlib [C#]
wuyq11 2011-01-05
  • 打赏
  • 举报
回复
yijianxiangde100 2011-01-05
  • 打赏
  • 举报
回复
关注这个问题
linchenrr 2011-01-05
  • 打赏
  • 举报
回复
4KB以上有一个500多KB的excel有问题 我用txt文件复制一些字符串到10KB在测试都没出问题
threenewbee 2011-01-05
  • 打赏
  • 举报
回复
解压缩文件长度计算有问题。
是不是 4kb 以上有问题?

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧