7-Zip for Asp.Net by shawl.qiu 2007-10-28

7-Zip for Asp.Net by shawl.qiu 2007-10-28


说明:
主要功能就是在线压缩, 解压缩...
这个程序是以 7-zip 的命令行版本为载体, 服务器不需要安装7-zip就可以使用本程序.

目前压缩格式支持: 7z, zip.
解压缩格式支持: 7z, zip, gzip, bzip2, tar, rar.

下载:
http://download.csdn.net/source/271751

结构:
G:/MYDOCU~1/INC470~1/cs/7z>tree /f
Folder PATH listing for volume Backup
Volume serial number is 0006EEEC 209C:FFAE
G:.
│  7z.exe
│  DevNotes.txt
│  Readme.txt
│  UnZip.ascx
│  Zip.ascx

├─Codecs
│      7zAES.dll
│      AES.dll
│      Branch.dll
│      BZip2.dll
│      Copy.dll
│      Deflate.dll
│      LZMA.dll
│      PPMd.dll
│      Rar29.dll
│      Swap.dll

├─Formats
│      7z.dll
│      arj.dll
│      bz2.dll
│      cab.dll
│      chm.dll
│      cpio.dll
│      deb.dll
│      gz.dll
│      lzh.dll
│      rar.dll
│      rpm.dll
│      split.dll
│      tar.dll
│      z.dll
│      zip.dll

├─HtmlTpl
│      UnZip.ascx.htm
│      Zip.ascx.html

└─Test
    │  UnZip_Test.aspx
    │  Zip_Test.aspx
    │
    ├─UnZipFolder
    │      7z.7z
    │      7z_Pwd-aaaaaa.7z
    │
    └─ZipFolder
        │  UnZip.ascx.txt
        │  UnZip.ascx.txt.htm
        │  UnZip_Test.aspx.txt
        │  UnZip_Test.aspx.txt.htm
        │  Zip.ascx.txt
        │  Zip.ascx.txt.htm
        │  Zip_Test.aspx.txt
        │  Zip_Test.aspx.txt.htm
        │
        └─subdir
                UnZip.ascx.txt.htm
                UnZip_Test.aspx.txt.htm
                Zip.ascx.txt.htm
                Zip_Test.aspx.txt.htm


G:/MYDOCU~1/INC470~1/cs/7z>

7z.exe 是命令行版本的 7-Zip
Zip.ascx 是压缩功能控件
UnZip.ascx 是解压缩功能控件
Codes 和 Formats 是压缩算法目录
test 目录提供 压缩解压演示...

注意: 里面的 .dll 不需要放到 /bin/ 文件夹

目录:
1. 压缩
1.1 Zip.ascx
1.2 Zip_test.aspx

2. 解压缩
2.1 UnZip.ascx
2.2 UnZip_test.aspx

shawl.qiu
2007-10-28
http://blog.csdn.net/btbtd

内容:
1. 压缩
1.1 Zip.ascx
<%@ Control  Language = "C#"  AutoEventWireup = "True"  className = "Zip"  %>
<%@  import  namespace = "System.Diagnostics" %>
<%@  import  namespace = "System.IO" %>
<%@  import  namespace = "System.Collections" %>
<%@  import  namespace = "System.Text" %>
<%@  import  namespace = "System.Text.RegularExpressions" %>
"server">
 string Path = "";
 string Prog = "";
 
 public static string InitArchivePath = "";
 public static string InitSavePath = "";
 public static string InitArchiveFilter = "*.*";
 public static string InitPathOption = "-r";
 
 public static string InitArchiveFormat = "zip";
 public static string InitArchiveOption = "0";
 
 SortedList SlZip = new SortedList();
 SortedList Sl7z = new SortedList();
 
 void Page_Load(Object o, EventArgs e)
 {
  Path = Server.MapPath(this.TemplateSourceDirectory+"/");
  Prog = Path+"7z.exe";
  InfoLabel.Text = "";
   
  SlZip.Add("1. 存档""0");
  SlZip.Add("2. 默认""5");
  SlZip.Add("3. 高压缩""9");
  
  Sl7z.Add("1. 存档""0");
  Sl7z.Add("2. 快速压缩""1");
  Sl7z.Add("3. 默认""5");
  Sl7z.Add("4. 高压缩""7");
  Sl7z.Add("5. 超级压缩""9");
  
  if(!IsPostBack)
  {
   ArchivePath.Text = InitArchivePath;
   ArchiveFilter.Text = InitArchiveFilter;
   SavePath.Text = InitSavePath; 
   PathOption.SelectedValue = InitPathOption;
   
   ArchiveFormat.SelectedValue = InitArchiveFormat;
   
   InitFormat(ArchiveFormat.SelectedValue);
   ArchiveOption.SelectedValue = InitArchiveOption;
  }
 } // end Page_Load
 
 string GetList(string sArchivePath)
 {
  ArchiveFilter.Text = Regex.Replace(@ArchiveFilter.Text, @"/s+""");
  if(ArchiveFilter.Text=="") return "/""+sArchivePath+"/"";
  
  string[] Ar = ArchiveFilter.Text.Split(',');
  int Len =Ar.Length;
  
  for(int i=0; i<Len; i++)
  {
   Ar[i] = "/""+sArchivePath+Ar[i]+"/"";
  }
  
  return " "+String.Join(" ", Ar);
 }
 
 void SubmitFunc(Object o, EventArgs e)
 {
  
  if(!ArchivePath.Text.EndsWith("/")) ArchivePath.Text+= "/";
  string sArchivePath = Server.MapPath(ArchivePath.Text);
  
  string sSavePath = Server.MapPath(SavePath.Text);
  
//  Response.Write("
sArchivePath: "+sArchivePath);

//  Response.Write("
sSavePath: "+sSavePath);

  
  if(!Directory.Exists(sArchivePath))
  {
   Message(InfoLabel, "指定的压缩路径不存在!("+ArchivePath.Text+")");
   return;
  }
  
  if(File.Exists(sSavePath))
  {
   Message(InfoLabel, "已存在压缩档: "+SavePath.Text);
   return;
  }
  
  sArchivePath = GetList(sArchivePath);
  
  string sArg =
  " a /""+@sSavePath+"/" "+@sArchivePath+" "
  +PathOption.SelectedValue+" -mx"+ArchiveOption.SelectedValue;
//  Response.Write("

sArg: "+sArg);
  
  if(ArchivePwd.Text!="")
  {
   if(ArchivePwd.Text!=ConfirmArchivePwd.Text)
   {
    Message(InfoLabel, "压缩密码和确认密码不同! ");
    return;
   }
   else
   {
    sArg += " -p"+ArchivePwd.Text;
   }
  } // end if(ArchivePwd.Text!="")
  
 string sOutput = "";
 Process MyPrc = new Process();
 
 MyPrc.StartInfo.FileName = Prog;
 MyPrc.StartInfo.Arguments= sArg;
 
 MyPrc.StartInfo.UseShellExecute = false;
 MyPrc.StartInfo.RedirectStandardOutput = true;

 MyPrc.Start();
 
 sOutput = MyPrc.StandardOutput.ReadToEnd();

 Message(InfoLabel, "操作完毕");
 Message(InfoLabel, "详细信息: 

"+sOutput+"
"
);
  
//  Process Process1 = new Process();
//  
//  Process1.EnableRaisingEvents = true;
//  
//  Process1.StartInfo.FileName = Prog;
//  Process1.StartInfo.Arguments= sArg;
//  
//  Process1.Start();
//  Process1.Exited += new EventHandler(ExitedEvent);
//  Process1.WaitForExit(int.Parse(MonitorMs.SelectedValue));
  
 } // end void SubmitFunc(Object o, EventArgs e)
 
 void ArchiveFormatIndexChange(Object o, EventArgs e)
 {
  InitFormat(ArchiveFormat.SelectedValue);
 }
 
 void InitFormat(string sFormat)
 {
  switch(sFormat)
  {
   case "7z":
    BindDropDownList(Sl7z, ArchiveOption);
    break;
   
   default:
    BindDropDownList(SlZip, ArchiveOption);
    break;
  } // end switch(sFormat)
 } // end void InitFormat(string sFormat)
 
 static void BindDropDownList(SortedList Ht, DropDownList Ddl)
 {
  Ddl.DataSource = Ht;
  Ddl.DataTextField = "Key";
  Ddl.DataValueField = "Value";
  Ddl.DataBind();
 }
 
 public void ExitedEvent(Object o, EventArgs e)
 {
  InfoLabel.Text = "";
  Message(InfoLabel, "操作完毕!");
 }
  
 public static void Message(Label InfoLabel, string msg)
 {
  InfoLabel.Text +=";
   InfoLabel.Text +="color:black!important;text-align:center!important;margin:10px 0px;/">";
  InfoLabel.Text += msg+"
";
 }
 
 public static void Message(string msg, Label InfoLbl, string bgcolor, string fgcolor)
 {
  InfoLbl.Text +="+bgcolor+"!important;";
   InfoLbl.Text +="color:"+fgcolor+"!important;text-align:center!important;margin:10px 0px;/">";
  InfoLbl.Text += msg+"
";
 }
 
 public static void Message(string msg, Label InfoLabel)
 {
  Message(msg, InfoLabel, "yellow""black");
 }
 
 public static void Message(string msg, Label InfoLabel, string bgcolor)
 {
  Message(msg, InfoLabel, bgcolor, "black");
 }
 
 public static void Message(Label InfoLabel, string msg, string charSet)
 {
  InfoLabel.Text+="+
  charSet+"/" />";
  Message(InfoLabel, msg);
 }


"InfoLabel" runat="server" />
"550" border="0" align="center" cellpadding="0" cellspacing="0" class="SolidAll">
 
   "2" align="center"> 压缩文件
 
 
   "99" align="right">压缩路径:
   "ArchivePath" runat="server" Columns="40" />
   (/x/)
  
 
 
   "99" align="right">筛选文件:
   "ArchiveFilter" runat="server" Columns="40" />
  (*.*[,*.*])
  
 
 
   "99" align="right">保存路径:
   "SavePath" runat="server" Columns="40" />
  (/x/x.x)
  
 
 
   "99" align="right">目录选项:
  
    "PathOption" runat="server">
     "-r">所有目录
     "-r-">只有当前目录
     "-r0">所有目录中的筛选项
   
  
 
 
   "99" align="right">压缩格式:
  
    "ArchiveFormat" runat="server"
    OnSelectedIndexChanged="ArchiveFormatIndexChange"
    AutoPostBack="true"
    >
     "zip">ZIP
     "7z">7z
   
  
 
 
   "right">压缩选项:
  
    "ArchiveOption" runat="server" >
   
  
 
 
   "right">密码:
  
    "ArchivePwd" runat="server" 
    TextMode="Password"
    />(不加密码保留为空!)
  
 
 
   "right">确认密码:
  
    "ConfirmArchivePwd" runat="server" 
    TextMode="Password"
    />
  
 
 
   "right">  
   "submit" type="submit"
   οnclick="return confirm('现在提交更改吗?')"
   value="提交" runat="server"
   onserverclick="SubmitFunc"
   id="SubmitIpt">
    "reset" type="reset"
   οnclick="return confirm('现在重置吗?')"
   value="重置" runat="server">
    "<% Response.Write(Request.Url)%>"> 返回 
  
 


"text-align:center; margin:15px 0px;">
 
"color:black">支持格式:  7z, zip.

  "margin:10px 0px;">
   "color:red;">注意:  不要使用物理路径, 请使用虚拟路径! 如(/path/)
 

  "margin:10px 0px;">
  7-Zip for Asp.Net by  "http://blog.csdn.net/btbtd/" target="_blank">shawl.qiu
 


1.2 Zip_test.aspx
<%@  Page  Language = "C#"  AutoEventWireup = "True"  %>
<%@  import  namespace = "System.Web.UI.WebControls"  %>
<%@ Reference  Control = "../Zip.ascx"  %>
"server">
 void Page_Load(Object s, EventArgs e)
 {
//  Zip.InitArchivePath = "";
//  Zip.InitSavePath = "";
  
  Zip.InitArchivePath = RelativePath("../Test/ZipFolder/")//"/cs/7z/Test/ZipFolder/";
  Zip.InitArchiveFilter = "*.htm,*.txt";
  Zip.InitSavePath = RelativePath("../Test/ZipFolder/7z.7z")//"/cs/7z/Test/ZipFolder/7z.7z";
  Zip.InitPathOption = "-r";
  
  Zip.InitArchiveFormat = "7z";
  Zip.InitArchiveOption = "0";
  
  Control TempControl = LoadControl("../Zip.ascx");
  MainPh.Controls.Add(TempControl);
  TempControl = null;
  
 } // end Page_Load
 
 public static string RelativePath(string sRelPath)
 { // shawl.qiu code, return string
  string sSiteRoot = System.Web.HttpContext.Current.Server.MapPath("/");
  string sPhsPath = System.Web.HttpContext.Current.Server.MapPath(sRelPath);
  
  int sSiteRootLen = sSiteRoot.Length;
  int sPhsPathLen = sPhsPath.Length;
  
  if(sSiteRootLen>=sPhsPathLen) return "/";
  
  return sPhsPath.Substring(sSiteRootLen-1).Replace("//", "/");
 } // end string RelativePath(string sRelPath)


"http://www.w3.org/1999/xhtml">

"Content-Type" content="text/html; charset=utf-8" />
</span>压缩文档  <span style="font-weight:bold;"><</span>- 7-Zip for Asp.Net by shawl.qiu <span style="color:rgb(0,0,153);font-weight:bold;">


  "server">

   "MainPh" runat="server"
   />
 
 
  "text/javascript">
 /*
 
 /*]]*/
 




2. 解压缩
2.1 UnZip.ascx
<%@ Control  Language = "C#"  AutoEventWireup = "True"  className = "UnZip"  %>
<%@  import  namespace = "System.Diagnostics" %>
<%@  import  namespace = "System.IO" %>
"server">
 string Path = "";
 string Prog = "";
 
 public static string InitArchivePath = "";
 public static string InitUnZipPath = "";
 public static string InitOverwriteMode = "-aoa";
 public static string InitPathOption = "-r";
 
 void Page_Load(Object o, EventArgs e)
 {
  Path = Server.MapPath(this.TemplateSourceDirectory+"/");
  Prog = Path+"7z.exe";
  InfoLabel.Text = "";
  
  if(!IsPostBack)
  {
   ArchivePath.Text = InitArchivePath;
   UnZipPath.Text = InitUnZipPath; 
   OverwriteMode.SelectedValue = InitOverwriteMode;
   PathOption.SelectedValue = InitPathOption;
  }
 } // end Page_Load
 
 void SubmitFunc(Object o, EventArgs e)
 {
  string sArchivePath = Server.MapPath(ArchivePath.Text);
  string sUnZipPath = Server.MapPath(UnZipPath.Text);
  
  string sArg =
  " e /""+@sArchivePath+"/" -o/""+@sUnZipPath+"/" *.* "+PathOption.SelectedValue
  +" "+@OverwriteMode.SelectedValue;
  
  if(!File.Exists(sArchivePath))
  {
   Message(InfoLabel, "找不到压缩文件("+ArchivePath.Text+")!");
   return;
  }
  
  if(ArchivePwd.Text!="")
  {
   sArg += "-p"+ArchivePwd.Text;
  }
  
  string sOutput = "";
  Process MyPrc = new Process();
  
  MyPrc.StartInfo.FileName = Prog;
  MyPrc.StartInfo.Arguments= sArg;
  
  MyPrc.StartInfo.UseShellExecute = false;
  MyPrc.StartInfo.RedirectStandardOutput = true;

  MyPrc.Start();
  
  sOutput = MyPrc.StandardOutput.ReadToEnd();

  Message(InfoLabel, "操作完毕");
  Message(InfoLabel, "详细信息: 
"+sOutput+"
"
);
  
 } // end void SubmitFunc(Object o, EventArgs e)
 
 public void ExitedEvent(Object o, EventArgs e)
 {  
  Process p = (Process)o;
  Response.Write("
Prc.ExitCode: "
+p.ExitCode);
  
  InfoLabel.Text = "";
  Message(InfoLabel, "操作完毕!");
  
 }
  
 public static void Message(Label InfoLabel, string msg)
 {
  InfoLabel.Text +=";
   InfoLabel.Text +="color:black!important;text-align:center!important;margin:10px 0px;/">";
  InfoLabel.Text += msg+"
";
 }
 
 public static void Message(string msg, Label InfoLbl, string bgcolor, string fgcolor)
 {
  InfoLbl.Text +="+bgcolor+"!important;";
   InfoLbl.Text +="color:"+fgcolor+"!important;text-align:center!important;margin:10px 0px;/">";
  InfoLbl.Text += msg+"
";
 }
 
 public static void Message(string msg, Label InfoLabel)
 {
  Message(msg, InfoLabel, "yellow""black");
 }
 
 public static void Message(string msg, Label InfoLabel, string bgcolor)
 {
  Message(msg, InfoLabel, bgcolor, "black");
 }
 
 public static void Message(Label InfoLabel, string msg, string charSet)
 {
  InfoLabel.Text+="+
  charSet+"/" />";
  Message(InfoLabel, msg);
 }


"InfoLabel" runat="server" />
"500" border="0" cellspacing="0" cellpadding="0" class="SolidAll" align="center">
 
   "2" align="center" valign="top"> 解压文件
 
 
   "99" align="right" valign="top">压缩文件:

   "left" valign="top"> "ArchivePath" runat="server" Columns="50">   
 
 
   "99" align="right" valign="top">解压到:
   "left" valign="top"> "UnZipPath" runat="server" Columns="50">
  
 
 
   "right" valign="top">覆盖模式:
   "left" valign="top">
    "OverwriteMode" runat="server">
     "-aoa" Selected="true">覆盖所有
     "-aos">跳过已有文件
     "-aou">自动重命名压缩包内文件
     "-aot">自动重命名已有文件
      
 
 
   "99" align="right">目录选项:
  
    "PathOption" runat="server">
     "-r">所有目录
     "-r-">只有当前目录
     "-r0">所有目录中的筛选项
      
 
 
   "right">密码:
   "ArchivePwd" runat="server" 
    TextMode="Password"
    /> 
   (不加密码保留为空!) 
   
 
   "99" align="right" valign="top">  
   "left" valign="top">
   "submit" type="submit"
   οnclick="return confirm('现在提交更改吗?')"
   value="提交" runat="server"
   onserverclick="SubmitFunc"
   id="SubmitIpt"
   />
    "reset" type="reset"
   οnclick="return confirm('现在重置吗?')"
   value="重置" runat="server"
   />  
    "<% Response.Write(Request.Url)%>">
   返回       
 


"text-align:center; margin:15px 0px;">
 
"color:black">支持格式:  7z, zip, gzip, bzip2, tar, rar.

  "margin:10px 0px;">
   "color:red;">注意:  不要使用物理路径, 请使用虚拟路径! 如(/path/)
 

  "margin:10px 0px;">
  7-Zip for Asp.Net by  "http://blog.csdn.net/btbtd/" target="_blank">shawl.qiu
 


2.2 UnZip_test.aspx
<%@  Page  Language = "C#"  AutoEventWireup = "True"  %>
<%@  import  namespace = "System.Web.UI.WebControls"  %>
<%@ Reference  Control = "../UnZip.ascx"  %>
"server">
 void Page_Load(Object s, EventArgs e)
 {
  //"/cs/7z/Test/UnZipFolder/7z.7z";
  UnZip.InitArchivePath = RelativePath("../Test/UnZipFolder/7z.7z")
  
  UnZip.InitUnZipPath = RelativePath("../Test/UnZipFolder/")//"/cs/7z/Test/UnZipFolder/";
  UnZip.InitOverwriteMode = "-aoa";
  UnZip.InitPathOption = "-r";
  
  Control TempControl = LoadControl("../UnZip.ascx");
  MainPh.Controls.Add(TempControl);
  TempControl = null;
  
 } // end Page_Load
 
 public static string RelativePath(string sRelPath)
 { // shawl.qiu code, return string
  string sSiteRoot = System.Web.HttpContext.Current.Server.MapPath("/");
  string sPhsPath = System.Web.HttpContext.Current.Server.MapPath(sRelPath);
  
  int sSiteRootLen = sSiteRoot.Length;
  int sPhsPathLen = sPhsPath.Length;
  
  if(sSiteRootLen>=sPhsPathLen) return "/";
  
  return sPhsPath.Substring(sSiteRootLen-1).Replace("//", "/");
 } // end string RelativePath(string sRelPath)


"http://www.w3.org/1999/xhtml">

"Content-Type" content="text/html; charset=utf-8" />
</span>解压文档  <span style="font-weight:bold;"><</span>- 7-Zip for Asp.Net by shawl.qiu <span style="color:rgb(0,0,153);font-weight:bold;">


  "server">

   "MainPh" runat="server"
   />
 
 
  "text/javascript">
 /*
 
 /*]]*/
 



你可能感兴趣的:(MS,C#.Net)