在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
上班第二天下班,课外作业,实现一个ZIP压缩的工具类.本来想用Package,但是写完了才发现不能解压其他工具压缩的zip包,比较麻烦,因此本工具类依赖了第三方的库(SharpZipLib version 0.86.0 http://icsharpcode.github.io/SharpZipLib/),上午花了两个小时整理了下代码,mark下!
1 /** 2 * Class: ZIP压缩工具类 3 * Reference: SharpZipLib version 0.86.0 (http://icsharpcode.github.io/SharpZipLib/) 4 * Author: Zengyq 5 * Version: 1.0 6 * Create Date: 2014-05-13 7 * Modified Date: 2014-05-14 8 */ 9 10 /****************构造函数*************************/ 11 ZipUtils() 12 ZipUtils(int compressionLevel) 13 14 /****************方法列表*************************/ 15 /// <summary> 16 /// 功能: ZIP方式压缩文件(压缩目录) 17 /// </summary> 18 /// <param name="dirPath">被压缩的文件夹夹路径</param> 19 /// <param name="zipFilePath">生成压缩文件的路径,缺省值:文件夹名+.zip</param> 20 /// <param name="msg">返回消息</param> 21 /// <returns>是否压缩成功</returns> 22 public bool ZipFolder(string dirPath, string zipFilePath, out string msg) 23 24 /// <summary> 25 /// 功能:压缩文件指定文件 26 /// </summary> 27 /// <param name="filenames">要压缩文件的绝对路径</param> 28 /// <param name="zipFilePath">生成压缩文件的路径, 缺省值为随机数字串.zip</param> 29 /// <param name="msg">返回消息</param> 30 /// <returns>是否压缩成功</returns> 31 public bool ZipFiles(string[] filenames, string zipFilePath, out string msg) 32 33 /// <summary> 34 /// 解压ZIP格式的文件。 35 /// </summary> 36 /// <param name="zipFilePath">压缩文件路径</param> 37 /// <param name="unZipDir">解压文件存放路径,缺省值压缩文件同一级目录下,跟压缩文件同名的文件夹</param> 38 /// <param name="msg">返回消息</param> 39 /// <returns>解压是否成功</returns> 40 public bool UnZipFile(string zipFilePath, string unZipDir, out string msg) 41 42 /// <summary> 43 /// 解压指定ZIP文件到当前路径 44 /// </summary> 45 /// <param name="zipFilePath">ZIP文件绝对路径</param> 46 /// <param name="msg">返回消息</param> 47 /// <returns>解压是否成功</returns> 48 public bool UnZipFileToCurrentPath(string zipFilePath, out string msg) 49 50 /****************调用样例*************************/ 51 ZipUtils zu = new ZipUtils(); 52 string msg = ""; 53 zu.UnZipFileToCurrentPath(@"C:\Users\zengyiqun\Desktop\package1024.zip", out msg);
类实现,没有采用静态类的形式,看了某博客用了out作为msg不懂会不会用到,先这样了,以下是实现类: 1 /** 2 * Class: ZIP压缩工具类 3 * Reference: SharpZipLib version 0.86.0 (http://icsharpcode.github.io/SharpZipLib/) 4 * Author: Zengyq 5 * Version: 1.0 6 * Create Date: 2014-05-13 7 * Modified Date: 2014-05-14 8 */ 9 10 using ICSharpCode.SharpZipLib.Zip; 11 using System; 12 using System.IO; 13 14 public class ZipUtils 15 { 16 //缓存大小 17 private int BufferSize; 18 19 //压缩率 0(无压缩)-9(压缩率最高) 20 private int CompressionLevel; 21 22 //压缩是用于存放压缩路径 23 private string CompressPath; 24 25 26 #region 构造函数 27 /// <summary> 28 /// 无参构造 29 /// </summary> 30 public ZipUtils() 31 { 32 this.BufferSize = 4096; 33 this.CompressionLevel = 9; 34 } 35 36 /// <summary> 37 /// 带参数构造 38 /// </summary> 39 /// <param name="compressionLevel">0(无压缩)-9(压缩率最高)</param> 40 public ZipUtils(int compressionLevel) 41 { 42 this.BufferSize = 4096; 43 this.CompressionLevel = compressionLevel; 44 } 45 #endregion 46 47 #region 压缩方法 48 /// <summary> 49 /// 功能: ZIP方式压缩文件(压缩目录) 50 /// </summary> 51 /// <param name="dirPath">被压缩的文件夹夹路径</param> 52 /// <param name="zipFilePath">生成压缩文件的路径,缺省值:文件夹名+.zip</param> 53 /// <param name="msg">返回消息</param> 54 /// <returns>是否压缩成功</returns> 55 public bool ZipFolder(string dirPath, string zipFilePath, out string msg) 56 { 57 this.CompressPath = dirPath; 58 //判断目录是否为空 59 if (dirPath == string.Empty) 60 { 61 msg = "The Folder is empty"; 62 return false; 63 } 64 65 //判断目录是否存在 66 if (!Directory.Exists(dirPath)) 67 { 68 msg = "The Folder is not exists"; 69 return false; 70 } 71 72 //压缩文件名为空时使用 文件夹名.zip 73 if (zipFilePath == string.Empty || zipFilePath == null) 74 { 75 if (dirPath.EndsWith("//")) 76 { 77 dirPath = dirPath.Substring(0, dirPath.Length - 1); 78 } 79 zipFilePath = dirPath + ".zip"; 80 } 81 82 try 83 { 84 using (ZipOutputStream s = new ZipOutputStream(File.Create(zipFilePath))) 85 { 86 s.SetLevel(this.CompressionLevel); 87 ZipDirectory(dirPath, s);//压缩目录,包含子目录 88 s.Finish(); 89 s.Close(); 90 } 91 } 92 catch (Exception ex) 93 { 94 msg = ex.Message; 95 return false; 96 } 97 98 msg = "Success"; 99 return true; 100 }//end function 101 102 /// <summary> 103 /// 压缩文件指定文件 104 /// </summary> 105 /// <param name="filenames">要压缩文件的绝对路径</param> 106 /// <param name="zipFilePath">生成压缩文件的路径, 缺省值为当前时间.zip</param> 107 /// <param name="msg">返回消息</param> 108 /// <returns>是否压缩成功</returns> 109 public bool ZipFiles(string[] filenames, string zipFilePath, out string msg) 110 { 111 msg = ""; 112 if (filenames.Length == 0) 113 { 114 msg = "No File Selected"; 115 return false; 116 } 117 118 //压缩文件名为空时使用 文件夹名.zip 119 if (zipFilePath == string.Empty || zipFilePath == null) 120 { 121 zipFilePath = System.Environment.CurrentDirectory + "\\" + DateTime.Now.ToFileTimeUtc().ToString() + ".zip"; 122 } 123 124 try 125 { 126 using (ZipOutputStream s = new ZipOutputStream(File.Create(zipFilePath))) 127 { 128 s.SetLevel(this.CompressionLevel); 129 ZipFilesAndDirectory(filenames,s); 130 s.Finish(); 131 s.Close(); 132 }//end using 133 } 134 catch (Exception ex) 135 { 136 msg = ex.Message; 137 return false; 138 } 139 140 msg = "Success"; 141 return true; 142 } 143 144 #endregion 145 146 #region 解压方法 147 /// <summary> 148 /// 解压ZIP格式的文件。 149 /// </summary> 150 /// <param name="zipFilePath">压缩文件路径</param> 151 /// <param name="unZipDir">解压文件存放路径,缺省值压缩文件同一级目录下,跟压缩文件同名的文件夹</param> 152 /// <param name="msg">返回消息</param> 153 /// <returns>解压是否成功</returns> 154 public bool UnZipFile(string zipFilePath, string unZipDir, out string msg) 155 { 156 msg = ""; 157 158 //判读路径是否为空 159 if (zipFilePath == string.Empty || zipFilePath == null) 160 { 161 msg = "ZipFile No Selected"; 162 return false; 163 } 164 165 //判读文件是否存在 166 if (!File.Exists(zipFilePath)) 167 { 168 msg = "ZipFile No Exists"; 169 return false; 170 } 171 //解压文件夹为空时默认与压缩文件同一级目录下,跟压缩文件同名的文件夹 172 if (unZipDir == string.Empty || unZipDir == null) 173 { 174 unZipDir = zipFilePath.Replace(Path.GetFileName(zipFilePath), Path.GetFileNameWithoutExtension(zipFilePath)); 175 } 176 177 if (!unZipDir.EndsWith("//")) 178 { 179 unZipDir += "//"; 180 } 181 182 if (!Directory.Exists(unZipDir)) 183 { 184 Directory.CreateDirectory(unZipDir); 185 } 186 187 try 188 { 189 using (ZipInputStream s = new ZipInputStream(File.OpenRead(zipFilePath))) 190 { 191 192 ZipEntry theEntry; 193 while ((theEntry = s.GetNextEntry()) != null) 194 { 195 string directoryName = Path.GetDirectoryName(theEntry.Name); 196 string fileName = Path.GetFileName(theEntry.Name); 197 if (directoryName.Length > 0) 198 { 199 Directory.CreateDirectory(unZipDir + directoryName); 200 } 201 if (!directoryName.EndsWith("//")) 202 { 203 directoryName += "//"; 204 } 205 if (fileName != String.Empty && fileName != null) 206 { 207 using (FileStream streamWriter = File.Create(unZipDir + theEntry.Name)) 208 { 209 CopyStream(s, streamWriter); 210 } 211 } 212 }//end while 213 }//end using 214 } 215 catch (Exception ex) 216 { 217 msg = ex.Message; 218 return false; 219 } 220 221 msg = "UnZip Success ! "; 222 return true; 223 }//end function 224 225 /// <summary> 226 /// 解压指定ZIP文件到当前路径 227 /// </summary> 228 /// <param name="zipFilePath">ZIP文件绝对路径</param> 229 /// <param name="msg">返回消息</param> 230 /// <returns>解压是否成功</returns> 231 public bool UnZipFileToCurrentPath(string zipFilePath, out string msg) 232 { 233 msg = ""; 234 235 //判读路径是否为空 236 if (zipFilePath == string.Empty || zipFilePath == null) 237 { 238 msg = "ZipFile No Selected"; 239 return false; 240 } 241 242 //判读文件是否存在 243 if (!File.Exists(zipFilePath)) 244 { 245 msg = "ZipFile No Exists"; 246 return false; 247 } 248 //解压到当前目录 249 string unZipDir = zipFilePath.Substring(0, zipFilePath.LastIndexOf(@"\")); 250 251 if (!unZipDir.EndsWith("//")) 252 { 253 unZipDir += "//"; 254 } 255 256 if (!Directory.Exists(unZipDir)) 257 { 258 Directory.CreateDirectory(unZipDir); 259 } 260 261 try 262 { 263 using (ZipInputStream s = new ZipInputStream(File.OpenRead(zipFilePath))) 264 { 265 ZipEntry theEntry; 266 while ((theEntry = s.GetNextEntry()) != null) 267 { 268 string directoryName = Path.GetDirectoryName(theEntry.Name); 269 string fileName = Path.GetFileName(theEntry.Name); 270 if (directoryName.Length > 0) 271 { 272 Directory.CreateDirectory(unZipDir + directoryName); 273 } 274 if (!directoryName.EndsWith("//")) 275 { 276 directoryName += "//"; 277 } 278 if (fileName != String.Empty && fileName != null) 279 { 280 using (FileStream streamWriter = File.Create(unZipDir + theEntry.Name)) 281 { 282 CopyStream(s, streamWriter); 283 } 284 } 285 }//end while 286 }//end using 287 } 288 catch (Exception ex) 289 { 290 msg = ex.Message; 291 return false; 292 } 293 294 msg = "UnZip Success ! "; 295 return true; 296 }//end function 297 298 #endregion 299 300 #region 内部方法 301 302 /// <summary> 303 /// 内部类:递归压缩目录 304 /// </summary> 305 全部评论
专题导读
热门推荐
热门话题
阅读排行榜
|
请发表评论