用SharpZip解压/压缩文件

  1. usingSystem;
  2. usingSystem.IO;
  3. usingSystem.Text;
  4. usingSystem.Collections;
  5. usingSystem.Diagnostics;
  6. usingSystem.Runtime.Serialization.Formatters.Binary;
  7. usingICSharpCode.SharpZipLib;
  8. usingICSharpCode.SharpZipLib.Checksums;
  9. usingICSharpCode.SharpZipLib.Zip;
  10. usingICSharpCode.SharpZipLib.GZip;
  11. usingICSharpCode.SharpZipLib.BZip2;
  12. usingICSharpCode.SharpZipLib.Zip.Compression;
  13. usingICSharpCode.SharpZipLib.Zip.Compression.Streams;
  14. ///<summary>
  15. ///Zip文件压缩、解压
  16. ///</summary>
  17. publicclassZipFile
  18. {
  19. ///<summary>
  20. ///解压类型
  21. ///</summary>
  22. publicenumUnzipType
  23. {
  24. ///<summary>
  25. ///解压到当前压缩文件所在的目录
  26. ///</summary>
  27. ToCurrentDirctory,
  28. ///<summary>
  29. ///解压到与压缩文件名相同的新的目录,如果有多个文件,将为每个文件创建一个目录
  30. ///</summary>
  31. ToNewDirctory
  32. }
  33. ///<summary>
  34. ///压缩文件,默认目录为当前目录,文件名为当前目录名,压缩级别为6
  35. ///</summary>
  36. ///<paramname="fileOrDirectory">要压缩的文件或文件夹</param>
  37. publicvoidZip(paramsstring[]fileOrDirectory)
  38. {
  39. Zip(6,fileOrDirectory);
  40. }
  41. ///<summary>
  42. ///压缩文件,默认目录为当前目录,文件名为当前目录名
  43. ///</summary>
  44. ///<paramname="zipLevel">压缩的级别</param>
  45. ///<paramname="fileOrDirectory">要压缩的文件或文件夹</param>
  46. publicvoidZip(intzipLevel,paramsstring[]fileOrDirectory)
  47. {
  48. if(fileOrDirectory==null)
  49. return;
  50. elseif(fileOrDirectory.Length<1)
  51. return;
  52. else
  53. {
  54. stringstr=fileOrDirectory[0];
  55. if(str.EndsWith("//"))
  56. str=str.Substring(0,str.Length-1);
  57. str+=".zip";
  58. Zip(str,zipLevel,fileOrDirectory);
  59. }
  60. }
  61. ///<summary>
  62. ///压缩文件,默认目录为当前目录
  63. ///</summary>
  64. ///<paramname="zipedFileName">压缩后的文件</param>
  65. ///<paramname="zipLevel">压缩的级别</param>
  66. ///<paramname="fileOrDirectory">要压缩的文件或文件夹</param>
  67. publicvoidZip(stringzipedFileName,intzipLevel,paramsstring[]fileOrDirectory)
  68. {
  69. if(fileOrDirectory==null)
  70. return;
  71. elseif(fileOrDirectory.Length<1)
  72. return;
  73. else
  74. {
  75. stringstr=fileOrDirectory[0];
  76. if(str.EndsWith("//"))
  77. str=str.Substring(0,str.Length-1);
  78. str=str.Substring(0,str.LastIndexOf("//"));
  79. Zip(zipedFileName,str,zipLevel,fileOrDirectory);
  80. }
  81. }
  82. ///<summary>
  83. ///压缩文件
  84. ///</summary>
  85. ///<paramname="zipedFileName">压缩后的文件</param>
  86. ///<paramname="zipLevel">压缩的级别</param>
  87. ///<paramname="currentDirectory">当前所处目录</param>
  88. ///<paramname="fileOrDirectory">要压缩的文件或文件夹</param>
  89. publicvoidZip(stringzipedFileName,stringcurrentDirectory,intzipLevel,paramsstring[]fileOrDirectory)
  90. {
  91. ArrayListAllFiles=newArrayList();
  92. //获取所有文件
  93. if(fileOrDirectory!=null)
  94. {
  95. for(inti=0;i<fileOrDirectory.Length;i++)
  96. {
  97. if(File.Exists(fileOrDirectory[i]))
  98. AllFiles.Add(fileOrDirectory[i]);
  99. elseif(Directory.Exists(fileOrDirectory[i]))
  100. GetDirectoryFile(fileOrDirectory[i],AllFiles);
  101. }
  102. }
  103. if(AllFiles.Count<1)
  104. return;
  105. ZipOutputStreamzipedStream=newZipOutputStream(File.Create(zipedFileName));
  106. zipedStream.SetLevel(zipLevel);
  107. for(inti=0;i<AllFiles.Count;i++)
  108. {
  109. stringfile=AllFiles[i].ToString();
  110. FileStreamfs;
  111. //打开要压缩的文件
  112. try
  113. {
  114. fs=File.OpenRead(file);
  115. }
  116. catch
  117. {
  118. continue;
  119. }
  120. try
  121. {
  122. byte[]buffer=newbyte[fs.Length];
  123. fs.Read(buffer,0,buffer.Length);
  124. //新建一个entry
  125. stringfileName=file.Replace(currentDirectory,"");
  126. if(fileName.StartsWith("//"))
  127. fileName=fileName.Substring(1);
  128. ZipEntryentry=newZipEntry(fileName);
  129. entry.DateTime=DateTime.Now;
  130. //保存到zip流
  131. fs.Close();
  132. zipedStream.PutNextEntry(entry);
  133. zipedStream.Write(buffer,0,buffer.Length);
  134. }
  135. catch
  136. {
  137. }
  138. finally
  139. {
  140. fs.Close();
  141. fs.Dispose();
  142. }
  143. }
  144. zipedStream.Finish();
  145. zipedStream.Close();
  146. }
  147. ///<summary>
  148. ///压缩文件夹
  149. ///</summary>
  150. ///<paramname="curretnDirectory">当前所在的文件夹</param>
  151. publicvoidZipDirectory(stringcurretnDirectory)
  152. {
  153. if(curretnDirectory==null)
  154. return;
  155. stringdir=curretnDirectory;
  156. if(dir.EndsWith("//"))
  157. dir=dir.Substring(0,dir.Length-1);
  158. stringfile=dir.Substring(dir.LastIndexOf("//")+1)+".zip";
  159. dir+="//"+file;
  160. Zip(dir,6,curretnDirectory);
  161. }
  162. ///<summary>
  163. ///压缩文件夹
  164. ///</summary>
  165. ///<paramname="curretnDirectory">当前所在的文件夹</param>
  166. publicvoidZipDirectory(stringcurretnDirectory,intzipLevel)
  167. {
  168. if(curretnDirectory==null)
  169. return;
  170. stringdir=curretnDirectory;
  171. if(dir.EndsWith("//"))
  172. dir=dir.Substring(0,dir.Length-1);
  173. dir+=".zip";
  174. Zip(dir,zipLevel,curretnDirectory);
  175. }
  176. //递归获取一个目录下的所有文件
  177. privatevoidGetDirectoryFile(stringparentDirectory,ArrayListtoStore)
  178. {
  179. string[]files=Directory.GetFiles(parentDirectory);
  180. for(inti=0;i<files.Length;i++)
  181. toStore.Add(files[i]);
  182. string[]directorys=Directory.GetDirectories(parentDirectory);
  183. for(inti=0;i<directorys.Length;i++)
  184. GetDirectoryFile(directorys[i],toStore);
  185. }
  186. ///<summary>
  187. ///解压文件
  188. ///<paramname="type">解压类型</param>
  189. ///<paramname="zipFile">要解压的文件</param>
  190. publicvoidUnZip(UnzipTypetype,paramsstring[]zipFile)
  191. {
  192. ZipInputStreamzipStream;
  193. ZipEntryentry;
  194. for(inti=0;i<zipFile.Length;i++)
  195. {
  196. zipStream=newZipInputStream(File.OpenRead(zipFile[i]));
  197. //获取目录名,并创建该目录
  198. stringdirectoryName="";
  199. if(type==UnzipType.ToNewDirctory)
  200. directoryName=zipFile[i].Substring(0,zipFile[i].LastIndexOf("."));
  201. else
  202. directoryName=zipFile[i].Substring(0,zipFile[i].LastIndexOf("//"));
  203. if(!Directory.Exists(directoryName))
  204. Directory.CreateDirectory(directoryName);
  205. //读出每一个文件
  206. while((entry=zipStream.GetNextEntry())!=null)
  207. {
  208. //获取文件名
  209. stringfileName=entry.Name;
  210. if(directoryName.EndsWith("//"))
  211. fileName=directoryName+fileName;
  212. else
  213. fileName=directoryName+"//"+fileName;
  214. if(fileName==String.Empty)
  215. continue;
  216. //创建一个文件
  217. if(!Directory.Exists(Path.GetDirectoryName(fileName)))
  218. Directory.CreateDirectory(Path.GetDirectoryName(fileName));
  219. FileStreamstreamWriter=File.Create(fileName);
  220. //写入文件
  221. intsize=2048;
  222. byte[]data=newbyte[2048];
  223. while(true)
  224. {
  225. size=zipStream.Read(data,0,data.Length);
  226. if(size>0)
  227. {
  228. streamWriter.Write(data,0,size);
  229. }
  230. else
  231. {
  232. break;
  233. }
  234. }
  235. streamWriter.Close();
  236. }
  237. zipStream.Close();
  238. }
  239. }
  240. ///<summary>
  241. ///解压文件
  242. ///<paramname="zipFile">要解压的文件,默认解压到新文件夹,每个文件对应生成一个文件夹</param>
  243. publicvoidUnZip(paramsstring[]zipFile)
  244. {
  245. UnZip(UnzipType.ToNewDirctory,zipFile);
  246. }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值