(一). 实现功能
对文件及目录的压缩及解压功能
(二). 运行图片示例
(三).代码
1. 压缩类
1
/**/
///
2/// 压缩类
3///
4 public class ZipClass
5 {
6 public static void ZipFile(string FileToZip, string ZipedFile, int CompressionLevel, int BlockSize)
7 {
8 //如果文件没有找到,则报错
9 if (!System.IO.File.Exists(FileToZip))
10 {
11 throw new System.IO.FileNotFoundException("指定要压缩的文件: " + FileToZip + " 不存在!");
12 }
13
14 System.IO.FileStream StreamToZip = new System.IO.FileStream(FileToZip, System.IO.FileMode.Open, System.IO.FileAccess.Read);
15 System.IO.FileStream ZipFile = System.IO.File.Create(ZipedFile);
16 ZipOutputStream ZipStream = new ZipOutputStream(ZipFile);
17 ZipEntry ZipEntry = new ZipEntry("ZippedFile");
18 ZipStream.PutNextEntry(ZipEntry);
19 ZipStream.SetLevel(CompressionLevel);
20 byte[] buffer = new byte[BlockSize];
21 System.Int32 size = StreamToZip.Read(buffer, 0, buffer.Length);
22 ZipStream.Write(buffer, 0, size);
23 try
24 {
25 while (size < StreamToZip.Length)
26 {
27 int sizeRead = StreamToZip.Read(buffer, 0, buffer.Length);
28 ZipStream.Write(buffer, 0, sizeRead);
29 size += sizeRead;
30 }
31 }
32 catch (System.Exception ex)
33 {
34 throw ex;
35 }
36 ZipStream.Finish();
37 ZipStream.Close();
38 StreamToZip.Close();
39 }
40
41 /**////
42 /// 压缩目录
43 ///
44 /// 数组(数组[0]: 要压缩的目录; 数组[1]: 压缩的文件名)
45 public static void ZipFileDictory(string[] args)
46 {
47 string[] filenames = Directory.GetFiles(args[0]);
48
49 Crc32 crc = new Crc32();
50 ZipOutputStream s = new ZipOutputStream(File.Create(args[1]));
51 s.SetLevel(6);
52 foreach (string file in filenames)
53 {
54 //打开压缩文件
55 FileStream fs = File.OpenRead(file);
56
57 byte[] buffer = new byte[fs.Length];
58 fs.Read(buffer, 0, buffer.Length);
59 ZipEntry entry = new ZipEntry(file);
60
61 entry.DateTime = DateTime.Now;
62
63 entry.Size = fs.Length;
64 fs.Close();
65
66 crc.Reset();
67 crc.Update(buffer);
68
69 entry.Crc = crc.Value;
70
71 s.PutNextEntry(entry);
72
73 s.Write(buffer, 0, buffer.Length);
74
75 }
76
77 s.Finish();
78 s.Close();
79 }
80
81 /**////
82 /// 压缩文件
83 ///
84 /// 要进行压缩的文件名
85 /// 压缩后生成的压缩文件名
86 public static void ZipFile(string FileToZip, string ZipedFile)
87 {
88 //如果文件没有找到,则报错
89 if (!File.Exists(FileToZip))
90 {
91 throw new System.IO.FileNotFoundException("指定要压缩的文件: " + FileToZip + " 不存在!");
92 }
93 FileStream fs = File.OpenRead(FileToZip);
94 byte[] buffer = new byte[fs.Length];
95 fs.Read(buffer, 0, buffer.Length);
96 fs.Close();
97
98 FileStream ZipFile = File.Create(ZipedFile);
99 ZipOutputStream ZipStream = new ZipOutputStream(ZipFile);
100 ZipEntry ZipEntry = new ZipEntry("ZippedFile");
101 ZipStream.PutNextEntry(ZipEntry);
102 ZipStream.SetLevel(6);
103
104 ZipStream.Write(buffer, 0, buffer.Length);
105 ZipStream.Finish();
106 ZipStream.Close();
107 }
108}
109
110 /**/ ///
111/// 解压类
112///
113 public class UnZipClass
114 {
115 /**////
116 /// 解压功能(解压压缩文件到指定目录)
117 ///
118 /// 待解压的文件
119 /// 指定解压目标目录
120 public static void UnZip(string[] args)
121 {
122 ZipInputStream s = new ZipInputStream(File.OpenRead(@args[0].Trim()));
123 ZipEntry theEntry;
124 string directoryName = Path.GetDirectoryName(@args[1].Trim());
125
126 if (!Directory.Exists(@args[1].Trim()))
127 {
128 Directory.CreateDirectory(directoryName);
129 }
130 while ((theEntry = s.GetNextEntry()) != null)
131 {
132 ;
133 string fileName = Path.GetFileName(theEntry.Name);
134
135 if (fileName != String.Empty)
136 {
137 FileStream streamWriter = File.Create(@args[1].Trim() + fileName);
138
139 int size = 2048;
140 byte[] data = new byte[2048];
141 while (true)
142 {
143 size = s.Read(data, 0, data.Length);
144 if (size > 0)
145 {
146 streamWriter.Write(data, 0, size);
147 }
148 else
149 {
150 break;
151 }
152 }
153
154 streamWriter.Close();
155 }
156 }
157 s.Close();
158 }
159
2/// 压缩类
3///
4 public class ZipClass
5 {
6 public static void ZipFile(string FileToZip, string ZipedFile, int CompressionLevel, int BlockSize)
7 {
8 //如果文件没有找到,则报错
9 if (!System.IO.File.Exists(FileToZip))
10 {
11 throw new System.IO.FileNotFoundException("指定要压缩的文件: " + FileToZip + " 不存在!");
12 }
13
14 System.IO.FileStream StreamToZip = new System.IO.FileStream(FileToZip, System.IO.FileMode.Open, System.IO.FileAccess.Read);
15 System.IO.FileStream ZipFile = System.IO.File.Create(ZipedFile);
16 ZipOutputStream ZipStream = new ZipOutputStream(ZipFile);
17 ZipEntry ZipEntry = new ZipEntry("ZippedFile");
18 ZipStream.PutNextEntry(ZipEntry);
19 ZipStream.SetLevel(CompressionLevel);
20 byte[] buffer = new byte[BlockSize];
21 System.Int32 size = StreamToZip.Read(buffer, 0, buffer.Length);
22 ZipStream.Write(buffer, 0, size);
23 try
24 {
25 while (size < StreamToZip.Length)
26 {
27 int sizeRead = StreamToZip.Read(buffer, 0, buffer.Length);
28 ZipStream.Write(buffer, 0, sizeRead);
29 size += sizeRead;
30 }
31 }
32 catch (System.Exception ex)
33 {
34 throw ex;
35 }
36 ZipStream.Finish();
37 ZipStream.Close();
38 StreamToZip.Close();
39 }
40
41 /**////
42 /// 压缩目录
43 ///
44 /// 数组(数组[0]: 要压缩的目录; 数组[1]: 压缩的文件名)
45 public static void ZipFileDictory(string[] args)
46 {
47 string[] filenames = Directory.GetFiles(args[0]);
48
49 Crc32 crc = new Crc32();
50 ZipOutputStream s = new ZipOutputStream(File.Create(args[1]));
51 s.SetLevel(6);
52 foreach (string file in filenames)
53 {
54 //打开压缩文件
55 FileStream fs = File.OpenRead(file);
56
57 byte[] buffer = new byte[fs.Length];
58 fs.Read(buffer, 0, buffer.Length);
59 ZipEntry entry = new ZipEntry(file);
60
61 entry.DateTime = DateTime.Now;
62
63 entry.Size = fs.Length;
64 fs.Close();
65
66 crc.Reset();
67 crc.Update(buffer);
68
69 entry.Crc = crc.Value;
70
71 s.PutNextEntry(entry);
72
73 s.Write(buffer, 0, buffer.Length);
74
75 }
76
77 s.Finish();
78 s.Close();
79 }
80
81 /**////
82 /// 压缩文件
83 ///
84 /// 要进行压缩的文件名
85 /// 压缩后生成的压缩文件名
86 public static void ZipFile(string FileToZip, string ZipedFile)
87 {
88 //如果文件没有找到,则报错
89 if (!File.Exists(FileToZip))
90 {
91 throw new System.IO.FileNotFoundException("指定要压缩的文件: " + FileToZip + " 不存在!");
92 }
93 FileStream fs = File.OpenRead(FileToZip);
94 byte[] buffer = new byte[fs.Length];
95 fs.Read(buffer, 0, buffer.Length);
96 fs.Close();
97
98 FileStream ZipFile = File.Create(ZipedFile);
99 ZipOutputStream ZipStream = new ZipOutputStream(ZipFile);
100 ZipEntry ZipEntry = new ZipEntry("ZippedFile");
101 ZipStream.PutNextEntry(ZipEntry);
102 ZipStream.SetLevel(6);
103
104 ZipStream.Write(buffer, 0, buffer.Length);
105 ZipStream.Finish();
106 ZipStream.Close();
107 }
108}
109
110 /**/ ///
111/// 解压类
112///
113 public class UnZipClass
114 {
115 /**////
116 /// 解压功能(解压压缩文件到指定目录)
117 ///
118 /// 待解压的文件
119 /// 指定解压目标目录
120 public static void UnZip(string[] args)
121 {
122 ZipInputStream s = new ZipInputStream(File.OpenRead(@args[0].Trim()));
123 ZipEntry theEntry;
124 string directoryName = Path.GetDirectoryName(@args[1].Trim());
125
126 if (!Directory.Exists(@args[1].Trim()))
127 {
128 Directory.CreateDirectory(directoryName);
129 }
130 while ((theEntry = s.GetNextEntry()) != null)
131 {
132 ;
133 string fileName = Path.GetFileName(theEntry.Name);
134
135 if (fileName != String.Empty)
136 {
137 FileStream streamWriter = File.Create(@args[1].Trim() + fileName);
138
139 int size = 2048;
140 byte[] data = new byte[2048];
141 while (true)
142 {
143 size = s.Read(data, 0, data.Length);
144 if (size > 0)
145 {
146 streamWriter.Write(data, 0, size);
147 }
148 else
149 {
150 break;
151 }
152 }
153
154 streamWriter.Close();
155 }
156 }
157 s.Close();
158 }
159
2. 前台页面代码
1
<
body
>
2 < form id = " form1 " runat = " server " >
3 < div >
4 & nbsp; < asp:Label ID = " Label1 " runat = " server " BackColor = " #C0C0FF " Font - Size = " XX-Large "
5 Height = " 44px " Text = " 压缩文件/文件夹示例 " Width = " 366px " > asp:Label >
6 < asp:Panel ID = " Panel1 " runat = " server " Height = " 1px " Width = " 369px " BackColor = " #FFFFC0 " >
7 < table width = " 100% " height = " 100% " >
8 < tr >
9 < td style = " width: 3px " valign = " top " >
10 < asp:Label ID = " lbDisplay " runat = " server " Text = " 压缩目录(from/to): " Width = " 153px " > asp:Label >< asp:TextBox ID = " TextBox1 " runat = " server " > asp:TextBox >
11 < br />
12 < asp:TextBox ID = " TextBox2 " runat = " server " > asp:TextBox >
13 & nbsp; < br />
14 < asp:Button ID = " btZipDictory " runat = " server " OnClick = " btZipDictory_Click " Text = " 压缩目录 " />< br />
15 td >
16 < td style = " width: 4px " valign = " middle " >
17 < asp:Label ID = " Label2 " runat = " server " Text = " 解压目录(from/to): " Width = " 154px " > asp:Label >
18 < asp:TextBox ID = " TextBox3 " runat = " server " > asp:TextBox >
19 < br />
20 < asp:TextBox ID = " TextBox4 " runat = " server " > asp:TextBox >
21 & nbsp; < br />
22 < asp:Button ID = " btUnZipDictory " runat = " server " Text = " 解压目录 " OnClick = " btUnZipDictory_Click " />< br />
23 td >
24 tr >
25 < tr >
26 < td style = " width: 3px; height: 150px " valign = " top " >
27 < asp:Label ID = " Label3 " runat = " server " Text = " 压缩文件(from/to): " Width = " 153px " > asp:Label >
28 < asp:TextBox ID = " TextBox5 " runat = " server " > asp:TextBox >
29 < br />
30 < asp:TextBox ID = " TextBox6 " runat = " server " > asp:TextBox >
31 & nbsp; < br />
32 < asp:Button ID = " btZipFile " runat = " server " Text = " 压缩文件 " OnClick = " btZipFile_Click " />< br />
33 td >
34 < td style = " width: 4px; height: 150px " valign = " top " >
35 < asp:Label ID = " Label4 " runat = " server " Text = " 解压文件(from/to): " Width = " 154px " > asp:Label >
36 < asp:TextBox ID = " TextBox7 " runat = " server " > asp:TextBox >
37 < br />
38 < asp:TextBox ID = " TextBox8 " runat = " server " > asp:TextBox >
39 & nbsp; < br />
40 < asp:Button ID = " btUnZipFile " runat = " server " Text = " 解压文件 " OnClick = " btUnZipFile_Click " />< br />
41 td >
42
43 tr >
44
45 table >
46 < asp:Label ID = " lbMessage " runat = " server " Width = " 368px " > asp:Label >< br />
47 < br />
48 asp:Panel >
49
50 div >
51 form >
52 body >
53
2 < form id = " form1 " runat = " server " >
3 < div >
4 & nbsp; < asp:Label ID = " Label1 " runat = " server " BackColor = " #C0C0FF " Font - Size = " XX-Large "
5 Height = " 44px " Text = " 压缩文件/文件夹示例 " Width = " 366px " > asp:Label >
6 < asp:Panel ID = " Panel1 " runat = " server " Height = " 1px " Width = " 369px " BackColor = " #FFFFC0 " >
7 < table width = " 100% " height = " 100% " >
8 < tr >
9 < td style = " width: 3px " valign = " top " >
10 < asp:Label ID = " lbDisplay " runat = " server " Text = " 压缩目录(from/to): " Width = " 153px " > asp:Label >< asp:TextBox ID = " TextBox1 " runat = " server " > asp:TextBox >
11 < br />
12 < asp:TextBox ID = " TextBox2 " runat = " server " > asp:TextBox >
13 & nbsp; < br />
14 < asp:Button ID = " btZipDictory " runat = " server " OnClick = " btZipDictory_Click " Text = " 压缩目录 " />< br />
15 td >
16 < td style = " width: 4px " valign = " middle " >
17 < asp:Label ID = " Label2 " runat = " server " Text = " 解压目录(from/to): " Width = " 154px " > asp:Label >
18 < asp:TextBox ID = " TextBox3 " runat = " server " > asp:TextBox >
19 < br />
20 < asp:TextBox ID = " TextBox4 " runat = " server " > asp:TextBox >
21 & nbsp; < br />
22 < asp:Button ID = " btUnZipDictory " runat = " server " Text = " 解压目录 " OnClick = " btUnZipDictory_Click " />< br />
23 td >
24 tr >
25 < tr >
26 < td style = " width: 3px; height: 150px " valign = " top " >
27 < asp:Label ID = " Label3 " runat = " server " Text = " 压缩文件(from/to): " Width = " 153px " > asp:Label >
28 < asp:TextBox ID = " TextBox5 " runat = " server " > asp:TextBox >
29 < br />
30 < asp:TextBox ID = " TextBox6 " runat = " server " > asp:TextBox >
31 & nbsp; < br />
32 < asp:Button ID = " btZipFile " runat = " server " Text = " 压缩文件 " OnClick = " btZipFile_Click " />< br />
33 td >
34 < td style = " width: 4px; height: 150px " valign = " top " >
35 < asp:Label ID = " Label4 " runat = " server " Text = " 解压文件(from/to): " Width = " 154px " > asp:Label >
36 < asp:TextBox ID = " TextBox7 " runat = " server " > asp:TextBox >
37 < br />
38 < asp:TextBox ID = " TextBox8 " runat = " server " > asp:TextBox >
39 & nbsp; < br />
40 < asp:Button ID = " btUnZipFile " runat = " server " Text = " 解压文件 " OnClick = " btUnZipFile_Click " />< br />
41 td >
42
43 tr >
44
45 table >
46 < asp:Label ID = " lbMessage " runat = " server " Width = " 368px " > asp:Label >< br />
47 < br />
48 asp:Panel >
49
50 div >
51 form >
52 body >
53
3. 后台页面代码
1
public
partial
class
_Default : System.Web.UI.Page
2 {
3 protected void Page_Load(object sender, EventArgs e)
4 {
5
6 }
7 protected void btZipDictory_Click(object sender, EventArgs e)
8 {
9 string[] FilePathS = new string[2];
10 FilePathS[0] = TextBox1.Text.Trim(); //待压缩的文件目录
11 FilePathS[1] = TextBox2.Text.Trim(); //生成的目标文件
12 ZipClass.ZipFileDictory(FilePathS);
13 }
14 protected void btUnZipDictory_Click(object sender, EventArgs e)
15 {
16 string[] FilePathS = new string[2];
17 FilePathS[0] = TextBox3.Text.Trim(); //待解压的文件
18 FilePathS[1] = TextBox4.Text.Trim(); //解压目标存放目录
19 UnZipClass.UnZip(FilePathS);
20 }
21 protected void btZipFile_Click(object sender, EventArgs e)
22 {
23 string[] FilePathS = new string[2];
24 FilePathS[0] = TextBox5.Text.Trim(); //待压缩的文件
25 FilePathS[1] = TextBox6.Text.Trim(); //生成的压缩文件名
26 ZipClass.ZipFile(FilePathS[0], FilePathS[1]);
27
28 }
29 protected void btUnZipFile_Click(object sender, EventArgs e)
30 {
31 string[] FilePathS = new string[2];
32 FilePathS[0] = TextBox7.Text.Trim(); //待解压的文件
33 FilePathS[1] = TextBox8.Text.Trim(); //解压目标存放目录
34 UnZipClass.UnZip(FilePathS);
35 }
36}
37
2 {
3 protected void Page_Load(object sender, EventArgs e)
4 {
5
6 }
7 protected void btZipDictory_Click(object sender, EventArgs e)
8 {
9 string[] FilePathS = new string[2];
10 FilePathS[0] = TextBox1.Text.Trim(); //待压缩的文件目录
11 FilePathS[1] = TextBox2.Text.Trim(); //生成的目标文件
12 ZipClass.ZipFileDictory(FilePathS);
13 }
14 protected void btUnZipDictory_Click(object sender, EventArgs e)
15 {
16 string[] FilePathS = new string[2];
17 FilePathS[0] = TextBox3.Text.Trim(); //待解压的文件
18 FilePathS[1] = TextBox4.Text.Trim(); //解压目标存放目录
19 UnZipClass.UnZip(FilePathS);
20 }
21 protected void btZipFile_Click(object sender, EventArgs e)
22 {
23 string[] FilePathS = new string[2];
24 FilePathS[0] = TextBox5.Text.Trim(); //待压缩的文件
25 FilePathS[1] = TextBox6.Text.Trim(); //生成的压缩文件名
26 ZipClass.ZipFile(FilePathS[0], FilePathS[1]);
27
28 }
29 protected void btUnZipFile_Click(object sender, EventArgs e)
30 {
31 string[] FilePathS = new string[2];
32 FilePathS[0] = TextBox7.Text.Trim(); //待解压的文件
33 FilePathS[1] = TextBox8.Text.Trim(); //解压目标存放目录
34 UnZipClass.UnZip(FilePathS);
35 }
36}
37
(
四
).
示例代码下载
http://files.cnblogs.com/ChengKing/ZIP.rar
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1452150