Asp.net在线压缩和解压缩简单实现(附项目源码)

简介:

首先服务器上要确保安装rar软件,且对相应目录有可写权限,该代码利用递归显示文件目录,实现文件在线压缩和解压并测试成功。

这里参照了一些网络文档(清清月儿),代码有详细注释,便于大家学习和参考。rar和unRar分别为压缩文件和解压文件存放目录。

以下是代码片断(注意命名空间和rar命令参数)

using  System.IO;
using  Microsoft.Win32;
using  System.Runtime.InteropServices;
using  System.Diagnostics;

// 该源码下载自www.51aspx.com(51aspx.com)
namespace  TreeRar
{
    
public partial class _Default : System.Web.UI.Page
    
{
        
protected void Page_Load(object sender, EventArgs e)
        
{
            
//递归展示文件目录
            string[] dir = Directory.GetDirectories(Server.MapPath("\\"));
            Response.Write(
"<table   width=100%   border=1   rules=rows   cellspacing=0   colspacing=0><tr   height=60   bgColor=#339900><td colspan=3 style=\"color=#FFFFFF\">目录列表:</td></tr>");
            
for (int i = 0; i < dir.Length; i++)
            
{
                
string href = dir[i];
                href 
= "http://"+Request.Url.Authority.ToString() + href.Substring(href.LastIndexOf("\\"));
                Response.Write(
"<tr     onmouseout=\"this.style.backgroundColor='#ffffff'\"   onmouseover=\"this.style.backgroundColor='#cccccc'\"><td>&nbsp;</td><td>" + dir[i] + "</td><td><a   href=" + href + ">打开</a></td></tr>");
            }

            Response.Write(
"</table>");
            lbTree.Text 
= Server.MapPath("\\");
            
//   在此处放置用户代码以初始化页面   
        }


        
//得到当前IP
        private string GetIP()
        
{
            
string[] IP_Ary;
            
string strIP, strIP_list;
            strIP_list 
= Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
            
if (strIP_list != null && strIP_list != "")
            
{
                strIP_list 
= strIP_list.Replace("'""");
                
if (strIP_list.IndexOf(",">= 0)
                
{
                    IP_Ary 
= strIP_list.Split(',');
                    strIP 
= IP_Ary[0];
                }

                
else
                
{
                    strIP 
= strIP_list;
                }

            }

            
else
            
{
                strIP 
= "";
            }

            
if (strIP == "")
            
{
                strIP 
= Request.ServerVariables["REMOTE_ADDR"];
                strIP 
= strIP.Replace("'""");
            }

            
return strIP;
        }



        
protected void btnZip_Click(object sender, EventArgs e)
        
{
          
//压缩
        String my51aspxRar;
        RegistryKey my51aspxReg;
        Object my51aspxObj;
        String my51aspxInfo;
        ProcessStartInfo my51aspxStartInfo;
        Process my51aspxProcess;
        
try
        
{
            my51aspxReg 
= Registry.ClassesRoot.OpenSubKey(@"Applications\WinRAR.exe\Shell\Open\Command");
            my51aspxObj 
= my51aspxReg.GetValue("");
            my51aspxRar 
= my51aspxObj.ToString();
            my51aspxReg.Close();
            my51aspxRar 
= my51aspxRar.Substring(1, my51aspxRar.Length - 7);
            my51aspxInfo 
= "a  -r  -ep1 51aspx.rar " + lbTree.Text + @"rar/51aspx.txt "+ lbTree.Text + @"rar";//这里为rar的压缩命令格式(也可以自行扩展)
            my51aspxStartInfo = new ProcessStartInfo();
            my51aspxStartInfo.FileName 
= my51aspxRar;
            my51aspxStartInfo.Arguments 
= my51aspxInfo;
            my51aspxStartInfo.WindowStyle 
= ProcessWindowStyle.Hidden;
            my51aspxStartInfo.WorkingDirectory 
= lbTree.Text + "rar"; ;//获取或设置要启动的进程的初始目录。
            my51aspxProcess = new Process();
            my51aspxProcess.StartInfo 
= my51aspxStartInfo;
            my51aspxProcess.Start();
            Response.Write(
"<font color=red>压缩成功</font>");
        }

        
catch (Exception ex)
       
{
            Response.Write(ex.ToString());
        }


        }


        
protected void btnUnZip_Click(object sender, EventArgs e)
        
{
         
//解压缩
        String my51aspxRar;
        RegistryKey my51aspxReg;
        Object my51aspxObj;
        String my51aspxInfo;
        ProcessStartInfo my51aspxStartInfo;
        Process my51aspxProcess;
        
try
        
{
            my51aspxReg 
= Registry.ClassesRoot.OpenSubKey(@"Applications\WinRar.exe\Shell\Open\Command");
            my51aspxObj 
= my51aspxReg.GetValue("");
            my51aspxRar 
= my51aspxObj.ToString();
            my51aspxReg.Close();
            my51aspxRar 
= my51aspxRar.Substring(1, my51aspxRar.Length - 7);
            my51aspxInfo 
= " X " + lbTree.Text + @"rar/51aspx.rar " + " " + lbTree.Text + @"unRar";
            my51aspxStartInfo 
= new ProcessStartInfo();
            my51aspxStartInfo.FileName 
= my51aspxRar;
            my51aspxStartInfo.Arguments 
= my51aspxInfo;
            my51aspxStartInfo.WindowStyle 
= ProcessWindowStyle.Hidden;
            my51aspxProcess 
= new Process();
            my51aspxProcess.StartInfo 
= my51aspxStartInfo;
            my51aspxProcess.Start();
            Response.Write(
"<font color=red>解压缩成功</font>");
        }

        
catch (Exception ex)
        
{
            Response.Write(ex.ToString());
        }


        }

    }

}

以下是rar命令语法说明

   从命令行也可以运行 WinRAR 命令,常规的命令行语法描述如下:

  WinRAR  <命令> -<开关1> -<开关N> <压缩文件> <文件...> <@列表文件...> <解压路径\>

命令 要 WinRAR 运行的字符组合代表功能
开关 切换操作指定类型,压缩强度,压缩文件类型,等等的定义。
压缩文件 要处理的压缩文件名。
文件 要处理的文件名。
列表文件 列表文件是包含要处理文件名称的纯文本。文件名应该在第一卷启动。可以在列表文件中使用//字符后添加注释。例如,你可以包含两列字符串创建 backup.lst:c:\work\doc\*.txt //备份文本文档     c:\work\image\*.bmp //备份图片c:\work\misc并接着运行: winrar a backup @backup.lst你可以在命令行中同时指定普通的文件名和列表文件名。
解压路径 只与命令 e 和 x ,搭配使用。指出解压文件添加的位置。如果文件夹不存在时,会自动创建。
注意事项
a) 如果未指定 文件 或是 列表文件 时,WinRAR 将会以缺省的 *.* 运行全部的文件;
b) 如果未指定压缩文件扩展名时,WinRAR 将会使用在 压缩配置 中选定的默认压缩文件格式。但你可以指定 .RAR 或 .ZIP 扩展名来替换它们;
c) 在命令行所输入的开关会替换相同的配置设置值;
d) 在命令 c、e、s、t、rr、k 和 x 可在压缩文件名中使用通配符。如此可以用单个的命令来进行超过一个以上的压缩文件,除此之外,如果你指定 -r 开关于这些命令时,它们将会搜索在子文件夹中的压缩文件;

e) 某些命令和开关只应用在 RAR 压缩文件,有些则在 RAR 和 ZIP 都可使用,而某些则可应用在全部的压缩文件格式。这一些都得看压缩文件格式所提供的特性而定;
f) 命令和开关的大小写是相同意思的,你可以用大写或者小写来下命令均可



本文转自 liudao 博客园博客,原文链接:http://www.cnblogs.com/liudao/archive/2007/09/06/884095.html,如需转载请自行联系原作者

相关文章
|
1月前
|
开发框架 网络协议 .NET
C#/.NET/.NET Core优秀项目和框架2024年10月简报
C#/.NET/.NET Core优秀项目和框架2024年10月简报
|
2月前
|
开发框架 前端开发 API
C#/.NET/.NET Core优秀项目和框架2024年9月简报
C#/.NET/.NET Core优秀项目和框架2024年9月简报
|
3月前
|
开发框架 .NET C#
VSCode开发.net项目时调试无效
【9月更文挑战第22天】在使用 VSCode 开发 .NET 项目时遇到调试问题,可从项目配置、调试配置、调试器安装、运行环境、日志和错误信息等方面排查。确认项目类型及文件配置,检查 `launch.json` 文件及配置项,确保调试器扩展已安装并启用,验证 .NET 运行时版本和环境变量,查看 VSCode 输出窗口和项目日志文件,检查权限及代码错误。若问题仍未解决,可查阅官方文档或社区论坛。
winform .net6 和 framework 的图表控件,为啥项目中不存在chart控件,该如何解决?
本文讨论了在基于.NET 6和.NET Framework的WinForms项目中添加图表控件的不同方法。由于.NET 6的WinForms项目默认不包含Chart控件,可以通过NuGet包管理器安装如ScottPlot等图表插件。而对于基于.NET Framework的WinForms项目,Chart控件是默认存在的,也可以通过NuGet安装额外的图表插件,例如LiveCharts。文中提供了通过NuGet添加图表控件的步骤和截图说明。
winform .net6 和 framework 的图表控件,为啥项目中不存在chart控件,该如何解决?
|
2月前
|
存储 消息中间件 前端开发
.NET常见的几种项目架构模式,你知道几种?
.NET常见的几种项目架构模式,你知道几种?
103 0
|
2月前
|
边缘计算 开发框架 人工智能
C#/.NET/.NET Core优秀项目和框架2024年8月简报
C#/.NET/.NET Core优秀项目和框架2024年8月简报
|
2月前
|
Cloud Native API C#
.NET云原生应用实践(一):从搭建项目框架结构开始
.NET云原生应用实践(一):从搭建项目框架结构开始
|
3月前
.NET 压缩/解压文件
【9月更文挑战第5天】在 .NET 中,可利用 `System.IO.Compression` 命名空间进行文件的压缩与解压。首先引入相关命名空间,然后通过 GZipStream 类实现具体的压缩或解压功能。下面提供了压缩与解压文件的方法示例及调用方式,便于用户快速上手操作。
|
4月前
|
jenkins 测试技术 持续交付
解锁.NET项目高效秘籍:从理论迷雾到实践巅峰,持续集成与自动化测试如何悄然改变游戏规则?
【8月更文挑战第28天】在软件开发领域,持续集成(CI)与自动化测试已成为提升效率和质量的关键工具。尤其在.NET项目中,二者的结合能显著提高开发速度并保证软件稳定性。本文将从理论到实践,详细介绍CI与自动化测试的重要性,并以ASP.NET Core Web API项目为例,演示如何使用Jenkins和NUnit实现自动化构建与测试。每次代码提交后,Jenkins自动触发构建流程,通过编译和运行NUnit测试确保代码质量。这种方式不仅节省了时间,还能快速发现并解决问题,推动.NET项目开发迈向更高水平。
54 8
|
4月前
|
架构师 开发者
【悬念揭秘】DDD:那片隐藏在软件深处的业务乐土——.NET项目如何借力领域驱动设计,让复杂业务逻辑迎刃而解?
【8月更文挑战第28天】领域驱动设计(DDD)在.NET项目中的应用聚焦于将业务领域知识与软件开发紧密结合,通过构建清晰的领域模型管理复杂业务逻辑。DDD的核心概念包括限界上下文、聚合、实体等,确保模型与实现的统一。在.NET中,通过CQRS和事件源等模式提高系统响应性和可扩展性,实现业务事件驱动的解耦与协作。DDD不仅是一种设计方法,更是要求开发者深入理解业务的文化,助力.NET项目应对复杂挑战,实现业务与技术的融合。
69 6