.Net使用SharpZip解压缩文件

最近,项目中使用到了上传压缩文件,文件上传到服务器后,肯定要解压,取出其中的文件才能使用,在这里做一个小结,Get这个新技能。

首先在使用NuGet管理程序在项目中添加引用ICSharpCode.SharpZipLib.dll.

在项目公共文件夹中添加SharpZip类。

 1 using ICSharpCode.SharpZipLib.Checksums;
 2 using ICSharpCode.SharpZipLib.Zip;
 3 using Microsoft.Win32;
 4 using System;
 5 using System.Collections.Generic;
 6 using System.Diagnostics;
 7 using System.IO;
 8 using System.Linq;
 9 using System.Text;
10 using System.Threading.Tasks;
11 
12 namespace App.Common.SharpZip
13 {
14 
15     public class SharpZip
16     {
17         public SharpZip() { }
18 
19         /// <summary>  
20         /// 解压缩  
21         /// </summary>  
22         /// <param name="file">待解压文件名(包含物理路径)</param>  
23         /// <param name="dir"> 解压到哪个目录中(包含物理路径)</param>  
24         public static bool UnpackFiles(string file, string dir)
25         {
26             try
27             {
28                 if (!Directory.Exists(dir))
29                 {
30                     Directory.CreateDirectory(dir);
31                 }
32                 ZipInputStream s = new ZipInputStream(File.OpenRead(file));
33                 ZipEntry theEntry;
34                 while ((theEntry = s.GetNextEntry()) != null)
35                 {
36                     string directoryName = Path.GetDirectoryName(theEntry.Name);
37                     string fileName = Path.GetFileName(theEntry.Name);
38                     if (directoryName != String.Empty)
39                     {
40                         Directory.CreateDirectory(dir + directoryName);
41                     }
42                     if (fileName != String.Empty)
43                     {
44                         FileStream streamWriter = File.Create(dir + fileName);
45                         int size = 2048;
46                         byte[] data = new byte[2048];
47                         while (true)
48                         {
49                             size = s.Read(data, 0, data.Length);
50                             if (size > 0)
51                             {
52                                 streamWriter.Write(data, 0, size);
53                             }
54                             else
55                             {
56                                 break;
57                             }
58                         }
59                         streamWriter.Close();
60                     }
61                 }
62                 s.Close();
63                 return true;
64             }
65             catch (Exception)
66             {
67                 throw;
68             }
69         }
70     }
71 }
View Code

接着就可以方便的使用这个新技能了

 1 /// <summary>
 2         /// 解压缩
 3         /// </summary>
 4         /// <returns></returns>
 5         public ActionResult UnPack()
 6         {
 7             ///.....
 8             ///
 9 
10 
11             var fullPath = Request.MapPath("/File/Temp/test.zip");
12             var unpackPath = Request.MapPath("/File/Temp/");
13             var unpackResult = SharpZip.UnpackFiles(fullPath, unpackPath);
14             if (unpackResult)
15             {
16                 ///......
17                 ///
18             }
19 
20 
21             ///.....
22             ///
23             return Content("success");
24         }
View Code

posted on 2019-01-26 22:35  那么远这么近  阅读(1013)  评论(0编辑  收藏  举报

导航