您的位置:首页 > 编程语言 > ASP

Asp.net 2.0 C#实现压缩/解压功能 (示例代码下载)

2006-12-21 18:55 1276 查看
(一). 实现功能

对文件及目录的压缩及解压功能

(二). 运行图片示例



(三).代码

1. 压缩类

1



/**//// <summary>
2

/// 压缩类
3

/// </summary>
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



/**//// <summary>
42

/// 压缩目录
43

/// </summary>
44

/// <param name="args">数组(数组[0]: 要压缩的目录; 数组[1]: 压缩的文件名)</param>
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



/**//// <summary>
82

/// 压缩文件
83

/// </summary>
84

/// <param name="FileToZip">要进行压缩的文件名</param>
85

/// <param name="ZipedFile">压缩后生成的压缩文件名</param>
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



/**//// <summary>
111

/// 解压类
112

/// </summary>
113

public class UnZipClass
114





{
115



/**//// <summary>
116

/// 解压功能(解压压缩文件到指定目录)
117

/// </summary>
118

/// <param name="args">待解压的文件</param>
119

/// <param name="args">指定解压目标目录</param>
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

 <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

 <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

 <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

 <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

 <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



(四). 示例代码下载
http://www.cnblogs.com/Files/ChengKing/ZIP.rar
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐