如何使用C#压缩文件及注意的问题!

转载 2006年06月22日 15:53:00
首选,先要找一个开源的C#压缩组件。
如:ICSharpCode.SharpZipLib 下载地址:http://www.icsharpcode.net/OpenSource/SharpZipLib/Default.aspx
根据它的帮助你就可以做自己需要的东东了。
我在使用这个组件行,遇到了一个问题。
当压缩小文件时没有什么错误,一旦源文件达到150M时,它会让你的机器垮掉。(至少是我的机器)
为什么会这样,因为如果源文件是150M时,你就需要在内存申请一个150M大小的字节数组。好点的机器还没问题,一般的机器可就惨了。如果文件在大的话,好机器也受不了的。
为了解决大文件压缩的问题,可以使用分段压缩的方法。

private string CreateZIPFile(string path,int M)
{
try
{
Crc32 crc = new Crc32();
ICSharpCode.SharpZipLib.Zip.ZipOutputStream zipout=new ICSharpCode.SharpZipLib.Zip.ZipOutputStream(System.IO.File.Create(path+".zip"));
System.IO.FileStream fs=System.IO.File.OpenRead(path);
long pai=1024*1024*M;//每M兆写一次
long forint=fs.Length/pai+1;
byte[] buffer=null;
ZipEntry entry = new ZipEntry(System.IO.Path.GetFileName(path));
entry.Size = fs.Length;
entry.DateTime = DateTime.Now;
zipout.PutNextEntry(entry);
for(long i=1;i<=forint;i++)
{
if(pai*i<fs.Length)
{
buffer = new byte[pai];
fs.Seek(pai*(i-1),System.IO.SeekOrigin.Begin);
}
else
{
if(fs.Length<pai)
{
buffer = new byte[fs.Length];
}
else
{
buffer = new byte[fs.Length-pai*(i-1)];
fs.Seek(pai*(i-1),System.IO.SeekOrigin.Begin);
}
}
fs.Read(buffer,0,buffer.Length);
crc.Reset();
crc.Update(buffer);
zipout.Write(buffer,0, buffer.Length);
zipout.Flush();
}
fs.Close();
zipout.Finish();
zipout.Close();
System.IO.File.Delete(path);
return path+".zip";
}
catch(Exception ex)
{
string str=ex.Message;
return path;
}
}

相关文章推荐

使用ZipOutputStream压缩文件,报没有文件被解压问题

偶得一段代码是压缩文件成zip格式的,但是遇到的问题是,含有中文的文件夹,压缩后无法打开,提示“没有文件被解压”;查询资料得出结论,jdk原生的ZipOutputStream对中文支持不太好,建议使用...

数学建模课件 优化问题 压缩文件

  • 2009年10月16日 22:19
  • 3.65MB
  • 下载

java压缩文件,中文问题

今天有同学问起来用java做压缩和解压缩的程序时,出现中文问题,我以前做过,不过已经很久了,那里又没有写日志,所以也忘记了自己所做的压缩小程序,今天又重新写一编,真是很浪费时间,平时要多做笔记,以后用...

c编辑压缩文件

  • 2015年04月26日 11:21
  • 3.33MB
  • 下载

Java采用readInt()方法直接读取特定的ZIP压缩文件出现了奇怪的问题

我有一个需求,要自定义一种基于数据流的数据存储格式,这种文件的数据格式是这样的: 数据是一段一段地存入文件的,每段之间的间隔标志就是下一段数据的长度,比如我要存入3段数据,它们的长度是{2234,3...

史上最简单解决ZipOutputStream压缩文件中文名乱码问题

用关键字“ZipOutputStream 压缩 中文乱码问题”一大把,无非是两种方法,第一种就是改JDK源码, 把ZipOutputStream拷贝出来,修改下编码,第二种就是用apache-ant,...

关于java中压缩与解压缩文件的问题

zip扮演着归档和压缩两个角色;gzip并不将文件归档,仅只是对单个文件进行压缩;...

Java 压缩、解压缩文件(中文乱码问题已解决)

鸣谢:http://blog.csdn.net/kalision/article/details/7864372 强力推荐解压:http://blog.csdn.net/smile725775/...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如何使用C#压缩文件及注意的问题!
举报原因:
原因补充:

(最多只允许输入30个字)