清清月儿 .NET万花筒 Asp.net技术 Asp.net教程 Asp.net源码 Asp.net基础 Asp.net控件 Asp.net入门

凡事由其自然,遇了处之泰然,得意之时淡然,失意之时坦然,艰辛曲折必然,历尽沧桑悟然。

黄鸣ID:21aspnet
[修改头像]
1705242次访问,排名3好友0人,关注者42
21aspnet的文章
原创 957 篇
翻译 7 篇
转载 15 篇
评论 997 篇
清清月儿的公告
最近评论
wangwang008:太棒了
patriot074:代码就是和codeproject一样。
大家运行时不要debug,否则就卡在那了,直接CTRL+F5,代码我测试过了。确实,还不如自定义一个控件,这样做不是很好。
irplay:已经把清儿的blog收到主页上去了
http://www.irplay.com/link
ainir1314520:重重的踩一脚
qaz123qwe:呵呵!不错1!
软件项目交易
订阅我的博客
XML聚合  FeedSky
订阅到鲜果
订阅到Google
订阅到抓虾
订阅到BlogLines
订阅到Yahoo
订阅到GouGou
订阅到飞鸽
订阅到Rojo
订阅到newsgator
订阅到netvibes
文章分类
收藏
    相册
    图片库
    图片库2
    .NET 工具
    C# to VB.NET Translator
    FxCop代码标准检测工具
    Multiple IE
    Nunit单元测试
    VB.NET and C# Comparison
    VB.NET 代码转为C#
    网站国际排名查询工具
    .NET 下载/讲座视频
    chinaitlab
    Visual Studio 2005 的工具
    wrox出版社书刊代码下载
    中国台湾微软MSDN
    中文MSDN WebCast网络广播全部下载列表
    源码之家
    .NET 优秀Blog
    cuike519的专栏
    dahuzizyd的专栏
    DotNet技术交流乐园
    DotNet男孩社区
    dudu
    gztoby
    Kemin's booootLog
    kimyoo(RSS)
    MSDN每日追踪
    Nios.Org
    Think Different and Think More
    Visual Studio.net专栏
    中国DotNet俱乐部
    体验ASP.NET 2.0新特性
    孟宪会之精彩世界之.NET开发者园地
    宝玉
    开心就好【博客堂】
    思归呓语
    木子 [I am praying]
    李洪根【VB】
    永春阁
    汉飞扬【Vista】
    涂曙光【SharePoint】
    维生素C.net
    网际浪子专栏(曾用名littlehb)
    葛涵涛
    蓝丽网VML教学网
    蝈蝈俊.net[csdn版]
    蝈蝈俊.net[joycode版]
    谭振林
    邹建
    阿良.NET
    鸟食轩(RSS)
    .NET 优秀网站
    .NET 官方网www.asp.net
    .NET开发资源精华收【不得不看】
    ASP .NET FAQ
    asp101
    aspfree
    C#开源资源
    C#开源资源大全
    C#语言在线帮助网站
    codeproject
    infragistics
    iwebsms
    MSDN中文
    Scott Guthrie(ASP.NET之父)
    SharePoint爱好者
    Wintellect
    www.411asp.net
    世界上最大的Open Source项目在线网站
    官方ASP.NET入门教程
    微软官方.NET指导站点
    最好的索引网站
    正则
    邮件发送常见问题解决方法
    Ajax链接
    bindows(RSS)
    DHTML menu4作者主页(RSS)
    EXT类库
    大量DHTML代码
    无忧脚本 - JavaScript
    综合开发技术网
    5D
    CSDN
    W3C技术在中国
    中国BS网
    中文C#技术站
    天新网
    天极网开发频道
    太平洋电脑网web开发
    看雪
    统一教学网
    网人帝国
    网页设计师:web标准教程及推广,网站重构
    蓝色理想
    豆豆技术网
    赛迪网
    闪客帝国
    雅趣技术网
    存档

    原创 asp.net利用RAR实现文件压缩解压缩【月儿原创】

    新一篇: C#优化字符串操作【月儿原创】

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

    作者:清清月儿

    主页:http://blog.csdn.net/21aspnet/           时间:2007.6.13

    如果服务器上安装了RAR程序,那么asp.net可以调用RAR实现文件压缩与解压缩。

    不过要注意的是,由于Web程序不能直接调用客户端的程序(除非用ActiveX,ActiveX几乎被废弃),所以如果要想实现让用户把本地文件用网页解压缩只有把文件上传到服务器上再调用服务器上的RAR压缩,同理要解压缩本地的RAR文件可以把文件上传到服务器解压再拿回来。

    本文讲怎么在服务器端的目录解压缩文件!

    效果图:

     前台代码:
    <%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
        
    <title>服务器端解压缩  清清月儿 http://blog.csdn.net/21aspnet/</title>
    </head>
    <body>
        
    <form id="form1" runat="server">
        
    <div>
            
    <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="压缩" />
            
    <asp:Button ID="Button2" runat="server" OnClick="Button2_Click" Text="解压缩" /></div>
        
    </form>
    </body>
    </html>

     

    后台代码:

    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());
            }

        }

    }

     

    服务器端目录:

    客户端解压缩的变通方法:

    发表于 @ 2007年06月13日 00:16:00|评论(loading...)|编辑

    旧一篇: asp.net的Ajax学习进阶【月儿原创】

    评论

    #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的话,用起来相对比较麻烦些吧
    #ringwangjx 发表于2008-01-24 08:44:01  IP: 218.18.140.*
    我是菜鸟
    我支持楼主
    加油啊
    #kingbian 发表于2008-01-24 11:05:52  IP: 222.64.142.*
    人家好好的一篇技术文章,好用就用了顺便留个言,没用就别用,为什么非要打击呢.要知道,敢于分享的总比你们这些把技术藏起来的要好上千百倍,再说,谁知道你是真有技术还是出牛呢.
    #cnkiminzhuhu 发表于2008-01-24 17:15:54  IP: 124.42.2.*
    支持楼主,支持原创
    发表评论  


    当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
    Csdn Blog version 3.1a
    Copyright © 清清月儿