首页 新闻 赞助 找找看

c# 怎样实现多文件压缩?

0
悬赏园豆:20 [已关闭问题]

单个文件的能实现,怎样实现多文件压缩呢,大家帮帮忙啊?

问题补充: 不要用组件的啊。生成ZIP格式的压缩文件,System.IO.Compression 中的 GZIP实现。 public bool GzipCompress(string[] sourceFiles, string disPath) { if (!Directory.Exists(disPath)) MessageBox.Show("路径出错!", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk, MessageBoxDefaultButton.Button1); if (!disPath.EndsWith("\\")) disPath += "\\"; string newName = "F" + Global.UserID + "-" + Guid.NewGuid().ToString() + ".zip"; strfileName = new FileInfo(Global.AccessoryPath + newName); bool result = true; FileStream fs1 = null; FileStream fs2 = null; GZipStream zips = null; try { foreach (var sourceFile in sourceFiles) { if (sourceFile != null) { int index = sourceFile.LastIndexOf("\\"); FFuJianName = FFuJianName + Global.UserID + "*" + sourceFile.Substring(index + 1) + "*" + newName + "*/"; fs1 = new FileStream(sourceFile, FileMode.Open, FileAccess.Read); fs2 = new FileStream(disPath + newName, FileMode.OpenOrCreate, FileAccess.Write); zips = new GZipStream(fs2, CompressionMode.Compress); byte[] tempb = new byte[fs1.Length]; fs1.Read(tempb, 0, (int)fs1.Length); byte[] exb = System.Text.Encoding.Unicode.GetBytes(Path.GetFileName(sourceFile)); byte[] lastb = new byte[fs1.Length + exb.Length + 1]; lastb[0] = Convert.ToByte(exb.Length); exb.CopyTo(lastb, 1); tempb.CopyTo(lastb, exb.Length + 1); zips.Write(lastb, 0, lastb.Length
tatung zhang的主页 tatung zhang | 初学一级 | 园豆:145
提问于:2008-11-26 18:53
< >
分享
其他回答(4)
0

先百度,在谷歌,一定可以搞定!

上不了岸的鱼 | 园豆:4613 (老鸟四级) | 2008-11-26 19:02
0

ICSharpCode.SharpZipLib.dll

 你去下载这个dll。里面有想成的压缩和解压缩方法。

 

Code

 

West | 园豆:1095 (小虾三级) | 2008-11-26 19:15
0

难道您实现了一个文件压缩就不能实现多个文件压缩了吗。

把多个文件用循环一个一个传给您那单个文件压缩的方法里去,传出时将每个压缩结果存放到一个数组或大文本变量中之后并给一个有别于其中任何内容的分割符,一起合并建立一个文件,不就OK了吗!

如果再复杂些,比如压缩的内容都比较大,那就向Zip或Rar软件学习,先建立一个文件,在将结果一点一点的写进去,不长时间住留在内存,或者使用多线程压缩方法。无论怎样其实就是您的那一个单个文件压缩方法才是整个压缩过程的核心技术,其他的都是辅助!

一个都实现了还怕不能举一反三吗!

对补充问题的有关回答:

看了您的这个代码,有几个问题。

1、单个文件可以通过对吗,而文件数组的参数,原先只是一个文件名后来是您更改的对吗?

2、您尝试过将两个不同文件压缩到同一个Zip文件中是什么效果了吗?

3、您提供的GZip流写入再追加一段压缩流不行嘛?

4、为何不把GZip流写入某个Zip文件呢,之后在这个文件中再追加写入新文件的压缩流。如果写入两个文件流这个Zip就无法被Zip或Rar打开,那么估计是您写入的规则不正确,文件和文件之间肯定是有分割的,所以您应该看看有关Zip二次开发的技术辅助资料。

完毕!!!

刚刚 | 园豆:3151 (老鸟四级) | 2008-11-27 01:15
0

楼主的需求不太明确,首先你要用什么压缩算法,另外你是不是要生成标准的压缩格式,如 Zip, Rar 等。还有你单个文件压缩如果没有用第三方组件是怎么实现的,你是不是也说明一下.

如果你不需要生成标准压缩格式,那就如楼上说的那样简单组合一下就可以了。如果你要生成标准压缩格式,你又不打算用第三方的东西,那就去读标准自己写了。

eaglet | 园豆:17139 (专家六级) | 2008-11-27 06:32
0

xuexi....

Jared.Nie | 园豆:1940 (小虾三级) | 2008-11-27 08:54
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册