Asp.net在线压缩和解压缩简单实现(附项目源码)
首先服务器上要确保安装rar软件,且对相应目录有可写权限,该代码利用递归显示文件目录,实现文件在线压缩和解压并测试成功。
这里参照了一些网络文档(清清月儿),代码有详细注释,便于大家学习和参考。rar和unRar分别为压缩文件和解压文件存放目录。
以下是代码片断(注意命名空间和rar命令参数)
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> </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) 命令和开关的大小写是相同意思的,你可以用大写或者小写来下命令均可