asp.net利用RAR实现文件压缩解压缩

来源:互联网 发布:有俄狄浦斯情结 知乎 编辑:程序博客网 时间:2024/04/30 21:59
导读:
  asp.net利用RAR实现文件压缩解压缩
  作者:清清月儿
  如果服务器上安装了RAR程序,那么asp.net可以调用RAR实现文件压缩与解压缩。
  不过要注意的是,由于Web程序不能直接调用客户端的程序(除非用ActiveX,ActiveX几乎被废弃),所以如果要想实现让用户把本地文件用网页解压缩只有把文件上传到服务器上再调用服务器上的RAR压缩,同理要解压缩本地的RAR文件可以把文件上传到服务器解压再拿回来。
  本文讲怎么在服务器端的目录解压缩文件!
  效果图:
  前台代码:
  <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> 服务器端解压缩 清清月儿 http://blog.csdn.net/21aspnet/

  
  后台代码:
  using System;using System.Data;using System.Configuration;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Web.UI.HtmlControls;using System.IO;using System.Runtime.InteropServices;using Microsoft.Win32;using System.Diagnostics;public partial class _Default : System.Web.UI.Page {
  protected void Page_Load(object sender, EventArgs e)
  {
  //清清月儿 http://blog.csdn.net/21aspnet/ } protected void Button1_Click(object sender, EventArgs e)
  {
  //压缩 String the_rar;
  RegistryKey the_Reg;
  Object the_Obj;
  String the_Info;
  ProcessStartInfo the_StartInfo;
  Process the_Process;
  try {
  the_Reg = Registry.ClassesRoot.OpenSubKey("Applications/WinRAR.exe/Shell/Open/Command");
  the_Obj = the_Reg.GetValue("");
  the_rar = the_Obj.ToString();
  the_Reg.Close();
  the_rar = the_rar.Substring(1, the_rar.Length - 7);
  the_Info = " a " + " 1.rar " + " " + "C:/1/1.txt" the_StartInfo = new ProcessStartInfo();
  the_StartInfo.FileName = the_rar;
  the_StartInfo.Arguments = the_Info;
  the_StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
  the_StartInfo.WorkingDirectory = "C:/1"//获取或设置要启动的进程的初始目录。 the_Process = new Process();
  the_Process.StartInfo = the_StartInfo;
  the_Process.Start();
  Response.Write("压缩成功");
  } catch (Exception ex)
  {
  Response.Write(ex.ToString());
  } } protected void Button2_Click(object sender, EventArgs e)
  {
  //解压缩 String the_rar;
  RegistryKey the_Reg;
  Object the_Obj;
  String the_Info;
  ProcessStartInfo the_StartInfo;
  Process the_Process;
  try {
  the_Reg = Registry.ClassesRoot.OpenSubKey("Applications/WinRar.exe/Shell/Open/Command");
  the_Obj = the_Reg.GetValue("");
  the_rar = the_Obj.ToString();
  the_Reg.Close();
  the_rar = the_rar.Substring(1, the_rar.Length - 7);
  the_Info = " X " + " 1.rar " + " " + "C:/1" the_StartInfo = new ProcessStartInfo();
  the_StartInfo.FileName = the_rar;
  the_StartInfo.Arguments = the_Info;
  the_StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
  the_Process = new Process();
  the_Process.StartInfo = the_StartInfo;
  the_Process.Start();
  Response.Write("解压缩成功");
  } catch (Exception ex)
  {
  Response.Write(ex.ToString());
  } }}
  
  服务器端目录:
  客户端解压缩的变通方法:
  Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1649810
  [收藏到我的网摘] [发送Trackback] 清清月儿发表于 2007年06月13日 00:16:00
  评论
  # liubingqian 发表于2007-06-13 10:11:07 IP: 124.249.172.*
  考虑rar的版权问题了吗?
  # crazy7 发表于2007-06-13 10:47:45 IP: 221.14.180.*
  好像不存在啥版权问题吧。。。。
  # chenxsh2615 发表于2007-06-13 11:23:26 IP: 219.233.253.*
  如果服务器装的是个绿色版的rar,也可以吗?
  # liubingqian 发表于2007-06-13 12:12:33 IP: 124.249.173.*
  rar是专有算法,不存在什么绿色红色的问题。可以免费使用unrar.exe解压缩,进行压缩需要在40天评估期后付费。
  # myppfly 发表于2007-06-13 13:15:07 IP: 220.201.37.*
  不过
  想不通为什么要这么做呢?
  # showrock 发表于2007-06-13 14:50:07 IP: 59.108.6.*
  不错!
  # TT 发表于2007-06-13 16:03:55 IP: 221.8.31.*
  这个压缩方式没有实际意义,相信作者也只是意淫一下吧?~~~
  # 涩谷 发表于2007-06-13 16:15:04 IP: 58.62.117.*
  没错..典型的意淫
  # foxflyhigher 发表于2007-06-13 16:23:48 IP: 218.1.21.*
  楼上的?首先问一下:你会吗?
  # hk8082 发表于2007-06-13 17:31:16 IP: 61.183.207.*
  如果文件很大,用WEB程序执行不是会很慢,感觉无多大实际意义。
  会不会死机
  # Kmiaoer 发表于2007-06-13 18:19:18 IP: 60.0.130.*
  月儿姐.看来我有要转帖了~~嘿嘿~~
  # wszhoho 发表于2007-06-13 18:34:32 IP: 60.176.251.*
  不错,不过启动服务器端的程序需要有权限的吗?
  # thumb_cn 发表于2007-06-13 22:02:41 IP: 124.162.73.*
  试了下。果然成功了。不过想请教一下:如何设置才能使压缩包保持相对路径。我在一个较深的目录下测试的。结果从根目录开始把绝对路径全部包含进压缩包了。想只要一个相对路径(只保持要压缩的文件的那一层目录就行了)
  # okok 发表于2007-06-13 22:04:05 IP: 147.8.84.*
  http://www.rarlab.com/rar/UnRARDLL.exe
  提供C#示例代码,所以楼主的这个想法不是最佳
  # freeheaven 发表于2007-06-14 11:27:17 IP: 61.232.2.*
  有学习意义,无应用意义
  # hx_lizhijie 发表于2007-06-14 12:52:15 IP: 218.26.162.*
  思想就是 传文件到服务器上面
  压缩或者解压缩后传回来
  拼凑一下几个功能,不是特别优秀的技术
  不过总算实用
  # ddd 发表于2007-06-14 18:08:58 IP: 210.82.61.*
  感觉挺搞笑的.
  用Process来运行应用程序,为什么非要说用asp.net来实现压缩解压.
  只要权限允许,可以调用任何WIDNOWS上的程序.
  这就象说用英文字符来拚"hello,world".
  # guest 发表于2007-06-14 18:15:49 IP: 210.82.61.*
  还有经常见到有人写"用c#来xxx",然后就是DLLImport 一大堆VC的函数在
  C#调用,还自以为很有技术,KAO,我都不知道如何笑了.
  如果我用汇编写一段系统重启的DLL,然后用C#调用,再把C#的exe文件做成功能键,然后用一根筷子点一下这个功能键,重启成功了.
  然后我就会写一篇文章说:用筷子调用系统重启.多牛!
  # Tony Huang 发表于2007-06-14 19:12:47 IP: 59.78.24.*
  不新、不强、不特别
  早就在用了。。
  # crazycyber 发表于2007-06-15 09:43:25 IP: 220.184.162.*
  没技术含量,不过贴给没做过的人看看也好。
  就贴贴这样的文章就好意思说,activex几乎被废弃,真把无知当有趣。
  web迅雷,flash这些活生生的例子在,不知道脑袋里是怎么想的。
  # gg 发表于2007-06-15 11:30:29 IP: 210.82.61.*
  因为在楼主眼中凡是他不懂的都是没有意义的,凡是他懂的都是很有意义的.
  # ah__fu 发表于2007-06-15 13:22:55 IP: 218.17.227.*
  iis必须要有创建进程的权限才行。
  类似的程序我以前也写过,不但可以调用rar.exe来压缩或者解压缩,还能显示进度。
  对于压缩:可以使用ICSharpCode.SharpZipLib库中的ZIP压缩或GZ压缩,使用RAR来压缩的话,只能调用EXE,不是很方便。
  对于解压缩:对应的ZIP或GZ格式仍然可以使用ICSharpCode.SharpZipLib库。但是对于RAR的解压缩,可以使用免费的UNRAR.DLL这个库,更加方便。
  有兴趣的朋友可以看看我写的文章:
  http://blog.csdn.net/ah__fu/archive/2006/08/16/1075880.aspx
  # ronglj 发表于2007-06-19 10:08:10 IP: 172.25.3.*
  我就不明白了,哪些说风凉话的人,你们算什么东西。
  你有能力写出来叫大家看看。
  就知道在那放屁。
  我支持楼主。
  # help 发表于2007-06-20 09:39:35 IP: 210.51.173.*
  我按照楼主的过程做了下 结果编译报错:无法识别的转义序列
  请问是什么原因啊???
  # cainiao0922 发表于2007-06-26 17:40:21 IP: 220.160.143.*
  这个进行改进!就可以进行图片批量的打包上传。上传后再自动解压缩重命名
  # freesky0904 发表于2007-07-22 18:42:47 IP: 61.187.204.*
  调试的时候可以进行压缩。。但生成了网站之后就不行了。提示也是压缩成功,不晓得是哪里权限没有弄好。请高手指点
  # yaomin1985 发表于2007-07-30 17:00:43 IP: 202.105.12.*
  感谢楼主,我正好要用到这个
  # Himoso 发表于2007-08-15 16:55:14 IP: 61.171.110.*
  好像没什么价值,试想一下一个几百M甚至更大的文件传上去给服务器压缩好再down下来,晕。。。
  # ly198478 发表于2007-08-31 11:28:59 IP: 218.206.99.*
  思想借鉴,人无完人,《七步诗》似乎只是用来背诵的吗?
  # GZ_2008 发表于2007-09-11 14:32:43 IP: 218.4.73.*
  看过了,楼主写的不错.
  但这里也提出点个人建议
  1.两个button事件内用了相同的局部变量,可以考虑提出到外面定义成私有变量,节省代码空间
  2.在button2的事件内,楼主的没有给.WorkingDirectory赋值,这样是不会解压成功的
  3.两个方法内的Response.Write("压缩成功");
  Response.Write("解压成功");这两句代码
  # GZ_2008 发表于2007-09-11 14:35:55 IP: 218.4.73.*
  继续补充:
  3.两个方法内的Response.Write("压缩成功");
  Response.Write("解压成功");这两句代码
  好象没有什么实际意义,不成功也同样会有提示的
  4.the_Info = " a " + " 1.rar " + " " + "C:/1/1.txt";
  是编译不过的,原因是"/"是转义字符,如果要使用应在使用的地方使用"//"代表"/"
  # luo_373883269 发表于2007-12-20 18:10:50 IP: 218.79.230.*
  现在又一个免费的ZIP压缩与解压缩的.dll
  直接用就可以了
  RAR的话,用起来相对比较麻烦些吧
  大名
  网址
  校验码:
  评论
  
  
  当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
  

本文转自
http://blog.csdn.net/21aspnet/archive/2007/06/13/1649810.aspx