对于之前发布的有关Net中使用压缩解压缩技术中,有个相当大的缺陷,是压缩文件时,不能递归压缩子文件夹。现将递归压缩的方法提供一下,还望大家多多探讨。(该代码参考别人写的例子修改了一下) 注意:请引用以下类库 using System; using System.Collections.Generic; using System.Text; using System.IO; using System.DirectoryServices; using ICSharpCode.SharpZipLib.Zip; using ICSharpCode.SharpZipLib.GZip; using ICSharpCode.SharpZipLib.Checksums; public class ZipHelper { ......... #region 压缩文件夹,支持递归 ///
/// 压缩文件夹 /// ///
待压缩的文件夹 ///
压缩后文件路径(包括文件名) ///
是否递归压缩 ///
public static bool Compress(string dir, string targetFileName,bool recursive) { //如果已经存在目标文件,询问用户是否覆盖 if (File.Exists(targetFileName)) { if (!_ProcessOverwrite(targetFileName)) return false; } if (recursive == false) return Compress(dir, targetFileName); FileStream ZipFile; ZipOutputStream ZipStream; //open ZipFile = File.Create(targetFileName); ZipStream = new ZipOutputStream(ZipFile); if (dir != String.Empty) { _CompressFolder(dir, ZipStream, dir); } //close ZipStream.Finish(); ZipStream.Close(); if (File.Exists(targetFileName)) return true; else return false; } ///
/// 压缩某个子文件夹 /// ///
///
///
private static void _CompressFolder(string basePath, ZipOutputStream zips, string zipfolername) { if (File.Exists(basePath)) { _AddFile(basePath, zips, zipfolername); return; } string[] names = Directory.GetFiles(basePath); foreach (string fileName in names) { _AddFile(fileName, zips, zipfolername); } names = Directory.GetDirectories(basePath); foreach (string folderName in names) { _CompressFolder(folderName, zips, zipfolername); } } ///
/// 压缩某个子文件 /// ///
///
///
private static void _AddFile(string fileName, ZipOutputStream zips, string zipfolername) { if (File.Exists(fileName)) { _CreateZipFile(fileName,zips,zipfolername); } } ///
/// 压缩单独文件 /// ///
///
///
private static void _CreateZipFile(string FileToZip, ZipOutputStream zips,string zipfolername) { try { FileStream StreamToZip = new FileStream(FileToZip, FileMode.Open, FileAccess.Read); string temp = FileToZip; string temp1 = zipfolername; if (temp1.Length > 0) { int i = temp1.LastIndexOf('//') + 1; int j = temp.Length - i; temp = temp.Substring(i, j); } ZipEntry ZipEn = new ZipEntry(temp); zips.PutNextEntry(ZipEn); byte[] buffer = new byte[16384]; System.Int32 size = StreamToZip.Read(buffer, 0, buffer.Length); zips.Write(buffer, 0, size); try { while (size < StreamToZip.Length) { int sizeRead = StreamToZip.Read(buffer, 0, buffer.Length); zips.Write(buffer, 0, sizeRead); size += sizeRead; } } catch (System.Exception ex) { throw ex; } StreamToZip.Close(); } catch (Exception e) { throw e; } } #endregion ......... } 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/ntshenwh/archive/2007/12/20/1955084.aspx
SharpZipLib压缩文件夹及文件
最新推荐文章于 2024-03-08 18:09:26 发布