Zip 解压缩
1 /// <summary>
2 /// Zip 压缩文件
3 /// </summary>
4 public class Zip
5 {
6 public Zip()
7 {
8
9 }
10 #region 加压方法
11 /// <summary>
12 /// 功能:压缩文件(暂时只压缩文件夹下一级目录中的文件,文件夹及其子级被忽略)
13 /// </summary>
14 /// <param name="dirPath">被压缩的文件夹夹路径</param>
15 /// <param name="zipFilePath">生成压缩文件的路径,为空则默认与被压缩文件夹同一级目录,名称为:文件夹名+.zip</param>
16 /// <param name="err">出错信息</param>
17 /// <returns>是否压缩成功</returns>
18 public static bool ZipFile(string dirPath, string zipFilePath, out string err)
19 {
20 err = "";
21 if (dirPath == string.Empty)
22 {
23 err = "要压缩的文件夹不能为空!";
24 return false;
25 }
26 if (!Directory.Exists(dirPath))
27 {
28 err = "要压缩的文件夹不存在!";
29 return false;
30 }
31 //压缩文件名为空时使用文件夹名+.zip
32 if (zipFilePath == string.Empty)
33 {
34 if (dirPath.EndsWith("\\"))
35 {
36 dirPath = dirPath.Substring(0, dirPath.Length - 1);
37 }
38 zipFilePath = dirPath + ".zip";
39 }
40
41 try
42 {
43 string[] filenames = Directory.GetFiles(dirPath);
44 using (ZipOutputStream s = new ZipOutputStream(File.Create(zipFilePath)))
45 {
46 s.SetLevel(9);
47 byte[] buffer = new byte[4096];
48 foreach (string file in filenames)
49 {
50 ZipEntry entry = new ZipEntry(Path.GetFileName(file));
51 entry.DateTime = DateTime.Now;
52 s.PutNextEntry(entry);
53 using (FileStream fs = File.OpenRead(file))
54 {
55 int sourceBytes;
56 do
57 {
58 sourceBytes = fs.Read(buffer, 0, buffer.Length);
59 s.Write(buffer, 0, sourceBytes);
60 } while (sourceBytes > 0);
61 }
62 }
63 s.Finish();
64 s.Close();
65 }
66 }
67 catch (Exception ex)
68 {
69 err = ex.Message;
70 return false;
71 }
72 return true;
73 }
74 #endregion
75
76 #region 解压
77 /// <summary>
78 /// 功能:解压zip格式的文件。
79 /// </summary>
80 /// <param name="zipFilePath">压缩文件路径</param>
81 /// <param name="unZipDir">解压文件存放路径,为空时默认与压缩文件同一级目录下,跟压缩文件同名的文件夹</param>
82 /// <param name="err">出错信息</param>
83 /// <returns>解压是否成功</returns>
84 public static bool UnZipFile(string zipFilePath, string unZipDir, out string err)
85 {
86 err = "";
87 if (zipFilePath == string.Empty)
88 {
89 err = "压缩文件不能为空!";
90 return false;
91 }
92 if (!File.Exists(zipFilePath))
93 {
94 err = "压缩文件不存在!";
95 return false;
96 }
97 //解压文件夹为空时默认与压缩文件同一级目录下,跟压缩文件同名的文件夹
98 if (unZipDir == string.Empty)
99 unZipDir = zipFilePath.Replace(Path.GetFileName(zipFilePath), Path.GetFileNameWithoutExtension(zipFilePath));
100 if (!unZipDir.EndsWith("\\"))
101 unZipDir += "\\";
102 if (!Directory.Exists(unZipDir))
103 Directory.CreateDirectory(unZipDir);
104
105 try
106 {
107 using (ZipInputStream s = new ZipInputStream(File.OpenRead(zipFilePath)))
108 {
109
110 ZipEntry theEntry;
111 while ((theEntry = s.GetNextEntry()) != null)
112 {
113 string directoryName = Path.GetDirectoryName(theEntry.Name);
114 string fileName = Path.GetFileName(theEntry.Name);
115 if (directoryName.Length > 0)
116 {
117 Directory.CreateDirectory(unZipDir + directoryName);
118 }
119 if (!directoryName.EndsWith("\\"))
120 directoryName += "\\";
121 if (fileName != String.Empty)
122 {
123 using (FileStream streamWriter = File.Create(unZipDir + theEntry.Name))
124 {
125
126 int size = 2048;
127 byte[] data = new byte[2048];
128 while (true)
129 {
130 size = s.Read(data, 0, data.Length);
131 if (size > 0)
132 {
133 streamWriter.Write(data, 0, size);
134 }
135 else
136 {
137 break;
138 }
139 }
140 }
141 }
142 }//while
143 }
144 }
145 catch (Exception ex)
146 {
147 err = ex.Message;
148 return false;
149 }
150 return true;
151 }//解压结束
152 #endregion
153
154
155 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/ZZJ_4Ever/archive/2009/03/31/4038595.aspx
2 /// Zip 压缩文件
3 /// </summary>
4 public class Zip
5 {
6 public Zip()
7 {
8
9 }
10 #region 加压方法
11 /// <summary>
12 /// 功能:压缩文件(暂时只压缩文件夹下一级目录中的文件,文件夹及其子级被忽略)
13 /// </summary>
14 /// <param name="dirPath">被压缩的文件夹夹路径</param>
15 /// <param name="zipFilePath">生成压缩文件的路径,为空则默认与被压缩文件夹同一级目录,名称为:文件夹名+.zip</param>
16 /// <param name="err">出错信息</param>
17 /// <returns>是否压缩成功</returns>
18 public static bool ZipFile(string dirPath, string zipFilePath, out string err)
19 {
20 err = "";
21 if (dirPath == string.Empty)
22 {
23 err = "要压缩的文件夹不能为空!";
24 return false;
25 }
26 if (!Directory.Exists(dirPath))
27 {
28 err = "要压缩的文件夹不存在!";
29 return false;
30 }
31 //压缩文件名为空时使用文件夹名+.zip
32 if (zipFilePath == string.Empty)
33 {
34 if (dirPath.EndsWith("\\"))
35 {
36 dirPath = dirPath.Substring(0, dirPath.Length - 1);
37 }
38 zipFilePath = dirPath + ".zip";
39 }
40
41 try
42 {
43 string[] filenames = Directory.GetFiles(dirPath);
44 using (ZipOutputStream s = new ZipOutputStream(File.Create(zipFilePath)))
45 {
46 s.SetLevel(9);
47 byte[] buffer = new byte[4096];
48 foreach (string file in filenames)
49 {
50 ZipEntry entry = new ZipEntry(Path.GetFileName(file));
51 entry.DateTime = DateTime.Now;
52 s.PutNextEntry(entry);
53 using (FileStream fs = File.OpenRead(file))
54 {
55 int sourceBytes;
56 do
57 {
58 sourceBytes = fs.Read(buffer, 0, buffer.Length);
59 s.Write(buffer, 0, sourceBytes);
60 } while (sourceBytes > 0);
61 }
62 }
63 s.Finish();
64 s.Close();
65 }
66 }
67 catch (Exception ex)
68 {
69 err = ex.Message;
70 return false;
71 }
72 return true;
73 }
74 #endregion
75
76 #region 解压
77 /// <summary>
78 /// 功能:解压zip格式的文件。
79 /// </summary>
80 /// <param name="zipFilePath">压缩文件路径</param>
81 /// <param name="unZipDir">解压文件存放路径,为空时默认与压缩文件同一级目录下,跟压缩文件同名的文件夹</param>
82 /// <param name="err">出错信息</param>
83 /// <returns>解压是否成功</returns>
84 public static bool UnZipFile(string zipFilePath, string unZipDir, out string err)
85 {
86 err = "";
87 if (zipFilePath == string.Empty)
88 {
89 err = "压缩文件不能为空!";
90 return false;
91 }
92 if (!File.Exists(zipFilePath))
93 {
94 err = "压缩文件不存在!";
95 return false;
96 }
97 //解压文件夹为空时默认与压缩文件同一级目录下,跟压缩文件同名的文件夹
98 if (unZipDir == string.Empty)
99 unZipDir = zipFilePath.Replace(Path.GetFileName(zipFilePath), Path.GetFileNameWithoutExtension(zipFilePath));
100 if (!unZipDir.EndsWith("\\"))
101 unZipDir += "\\";
102 if (!Directory.Exists(unZipDir))
103 Directory.CreateDirectory(unZipDir);
104
105 try
106 {
107 using (ZipInputStream s = new ZipInputStream(File.OpenRead(zipFilePath)))
108 {
109
110 ZipEntry theEntry;
111 while ((theEntry = s.GetNextEntry()) != null)
112 {
113 string directoryName = Path.GetDirectoryName(theEntry.Name);
114 string fileName = Path.GetFileName(theEntry.Name);
115 if (directoryName.Length > 0)
116 {
117 Directory.CreateDirectory(unZipDir + directoryName);
118 }
119 if (!directoryName.EndsWith("\\"))
120 directoryName += "\\";
121 if (fileName != String.Empty)
122 {
123 using (FileStream streamWriter = File.Create(unZipDir + theEntry.Name))
124 {
125
126 int size = 2048;
127 byte[] data = new byte[2048];
128 while (true)
129 {
130 size = s.Read(data, 0, data.Length);
131 if (size > 0)
132 {
133 streamWriter.Write(data, 0, size);
134 }
135 else
136 {
137 break;
138 }
139 }
140 }
141 }
142 }//while
143 }
144 }
145 catch (Exception ex)
146 {
147 err = ex.Message;
148 return false;
149 }
150 return true;
151 }//解压结束
152 #endregion
153
154
155 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/ZZJ_4Ever/archive/2009/03/31/4038595.aspx