Asp.net 2.0 C#实现压缩/解压功能 (示例代码)
发布日期:2022-02-19 23:50:21
浏览次数:30
分类:技术文章
本文共 7207 字,大约阅读时间需要 24 分钟。
(一). 实现功能
对文件及目录的压缩及解压功能
(二). 运行图片示例
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);134135 if (fileName != String.Empty)136 { 137 FileStream streamWriter = File.Create(@args[1].Trim() + fileName);138139 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 else149 { 150 break;151 }152 }153154 streamWriter.Close();155 }156 }157 s.Close();158 }
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]);2728 }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
转载地址:https://blog.csdn.net/lerrywang008/article/details/1830616 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
不错!
[***.144.177.141]2024年04月22日 17时08分30秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
php error_reporting 详解
2019-04-27
剖析PHP中的输出缓冲
2019-04-27
HTTP响应头不缓存
2019-04-27
apache的keepalive和keepalivetimeout(apache优化)
2019-04-27
内容协商 (Content Negotiation)
2019-04-27
关于URL编码
2019-04-27
HTTP中的缓存
2019-04-27
Varnish 和 Squid比较到底强多少
2019-04-27
mysql常用语句集锦
2019-04-27
PHP的Smarty
2019-04-27
ecshop模板的原理分析
2019-04-27
深入探究Smarty模版
2019-04-27
PHP高效率写法(详解原因)
2019-04-27
PHP数组实际占用内存大小的分析
2019-04-27
PHP运行模式
2019-04-27
MYSQL的MERGE存储引擎
2019-04-27
mysql 压力测试脚本
2019-04-27
PHP代码保护——Zend Guard
2019-04-27
Javassist 使用指南
2019-04-27
Unix下C程序内存泄漏检测工具Valgrind安装与使用
2019-04-27