All articles| All Pictures| All Softwares| All Video| Go home page| Write articles| Upload pictures

Reading number is top 10 articles
php和asp对象的等价关系_[PHP教程]
应该学会:ASP.NET的,Session,详解_.net资料_编程技术
PHP入门:如何获得PHP相关资料-_[PHP教程]
Asp.Net中NHiernate的Session的管理_[Asp.Net教程]
用PHP自动把纯文本转换成Web页面_[PHP教程]
PHP中使用XML-RPC构造Web Service简单入门_[PHP教程]
HTML 5 预览(3)_[Html教程]
GridView中如何使用CommandField删除时,弹出确认框_[Asp.Net教程]
ASP.NET查询ACCESS数据库的内容并在DATAVIEW中显示出来_.net资料_编程技术
新手入门:IIS6环境下的PHP最佳配置方法_php资料_编程技术
Reading number is top 10 pictures
The wise woman of chest1
More attractive than sora aoi3
Photographed the passion of the clients and prostitutes in the sex trade picture2
陪睡门马睿菈自曝写真 称首拍大尺度照片1
The money of more than 100 countries and regions6
可爱的小动物
29 the belle stars after bath figure3
Cesarean section, bloody, silently into it!1
The money of more than 100 countries and regions18
赵惟依写真3
Download software ranking
在线棋牌游戏3.05版
Sora aoi‘s film--Lust fan wall
Macromedia Dreamweaver 8
超级战舰
C#程序员参考手册
matrix3
Boxer Classic video1
Tram sex maniac 2 (H) rar bag4
Boxer's Top ten classic battle2
1400篇各类破解文章
aaa published in(发表于) 2013/12/17 7:45:47 Edit(编辑)
ASP.NET利用RAR实现文件压缩解压缩_.net资料_编程技术

ASP.NET利用RAR实现文件压缩解压缩_.net资料_编程技术

ASP.NET利用RAR实现文件压缩解压缩_.net资料_编程技术-你的首页-uuhomepage.com
  我们经常会遇到批量上传的问题,也会遇到将某个目录下所有文件都上传到服务器上的问题。那么,如何解决此类问题呢?以前的技术一般采用ActiveX等方式,这里笔者采用SharpZlib来实现,听说VS2005已有压缩和解压缩的解决方案,笔者还没有时间用VS2005,所以就只好使用VS2003 + SharpZlib来解决问题了。

  1、首先从这里下载0.84版本的SharpZlib源码及示例码。

  2、下载下来之后你发现它没有VS2003的解决方案文件,没有关系。你可以自己建立,首先新建一个ZipUnzip的解决方案,然后,将上面经过解压缩之后的所有文件及目录COPY到你的解决方案所在的目录下。

  3、在VS2003解决方案资源管理器(一般是在右上方中部点的位置)中点击显示所有文件按钮,然后可以见到很多“虚”的图标、文件及文件夹等,可以一次选择它们,然后包含进项目中。

  4、编译,最好使用Release选项,编译完成之后你可以在\bin\Release\看到ZipUnzip.dll的类了。如果你编译时报错,说什么AssemblyKeyFile之类的,你可以使用强命名工具新建一个,也可以将AssemblyInfo.cs中[assembly: AssemblyKeyFile("。。。。。")]改成:[assembly: AssemblyKeyFile("")] (不推荐这样做)。

  5、新建一个WEBFORM项目,添加ZipUnzip.dll类的引用,然后添加如下文件及内容:


// ------------------------------------------
// 1. AttachmentUnZip.cs
// ------------------------------------------
using System;
using System.IO;
using ICSharpCode.SharpZipLib.Zip;
using ICSharpCode.SharpZipLib.GZip;
using ICSharpCode.SharpZipLib.BZip2;
using ICSharpCode.SharpZipLib.Checksums;
using ICSharpCode.SharpZipLib.Zip.Compression;
using ICSharpCode.SharpZipLib.Zip.Compression.Streams;

namespace WebZipUnzip
{
 public class AttachmentUnZip
 {
  public AttachmentUnZip()
  {}
  public static void UpZip(string zipFile)
  {
   string []FileProperties=new string[2];
   FileProperties[0]=zipFile;//待解压的文件
   FileProperties[1]=zipFile.Substring(0,zipFile.LastIndexOf("\\")+1);//解压后放置的目标目录
   UnZipClass UnZc=new UnZipClass();
   UnZc.UnZip(FileProperties);
  }
 }
}

// ---------------------------------------------
// 2. UnZipClass.cs
// ---------------------------------------------

using System;
using System.IO;
using ICSharpCode.SharpZipLib.Zip;
using ICSharpCode.SharpZipLib.GZip;
using ICSharpCode.SharpZipLib.BZip2;
using ICSharpCode.SharpZipLib.Checksums;
using ICSharpCode.SharpZipLib.Zip.Compression;
using ICSharpCode.SharpZipLib.Zip.Compression.Streams;

namespace WebZipUnzip
{
 public class UnZipClass
 {
  ///
  /// 解压文件
  ///
  /// 包含要解压的文件名和要解压到的目录名数组
  public void UnZip(string[] args)
  {
   ZipInputStream s = new ZipInputStream(File.OpenRead(args[0]));
   try
   {
    ZipEntry theEntry;
    while ((theEntry = s.GetNextEntry()) != null)
    {
     string directoryName = Path.GetDirectoryName(args[1]);
     string fileName = Path.GetFileName(theEntry.Name);

     //生成解压目录
     Directory.CreateDirectory(directoryName);

     if (fileName != String.Empty)
     {
      //解压文件到指定的目录
      FileStream streamWriter = File.Create(args[1]+fileName);
      int size = 2048;
      byte[] data = new byte[2048];
      while (true)
      {
       size = s.Read(data, 0, data.Length);
       if (size > 0)
       {
        streamWriter.Write(data, 0, size);
       }
       else
       {
        break;
       }
      }
      streamWriter.Close();
     }
    }
    s.Close();
   }
   catch(Exception eu)
   {
    throw eu;
   }
   finally
   {
    s.Close();
   }
  }//end UnZip

  public static bool UnZipFile(string file, string dir)
  {
   try
   {
    if (!Directory.Exists(dir))
     Directory.CreateDirectory(dir);
     string fileFullName = Path.Combine(dir,file);
     ZipInputStream s = new ZipInputStream(File.OpenRead( fileFullName ));
 
     ZipEntry theEntry;
     while ((theEntry = s.GetNextEntry()) != null)
     {
      string directoryName = Path.GetDirectoryName(theEntry.Name);
      string fileName = Path.GetFileName(theEntry.Name);
 
      if (directoryName != String.Empty)
       Directory.CreateDirectory( Path.Combine(dir, directoryName));
       if (fileName != String.Empty)
       {
        FileStream streamWriter = File.Create( Path.Combine(dir,theEntry.Name) );
        int size = 2048;
        byte[] data = new byte[2048];
        while (true)
        {
         size = s.Read(data, 0, data.Length);
         if (size > 0)
         {
          streamWriter.Write(data, 0, size);
         }
         else
         {
          break;
         }
        }
        streamWriter.Close();
       }
      }
      s.Close();
      return true;
     }
     catch (Exception)
     {
      throw;
     }
    }
   }//end UnZipClass
  }

// ----------------------------------------------
// 3. ZipClass.cs
// ----------------------------------------------
using System;
using System.IO;
using ICSharpCode.SharpZipLib.Zip;
using ICSharpCode.SharpZipLib.GZip;
using ICSharpCode.SharpZipLib.BZip2;
using ICSharpCode.SharpZipLib.Checksums;
using ICSharpCode.SharpZipLib.Zip.Compression;
using ICSharpCode.SharpZipLib.Zip.Compression.Streams;

namespace WebZipUnzip
{
 ///
 /// 压缩文件
 ///
 public class ZipClass
 {
  public void ZipFile(string FileToZip, string ZipedFile ,int CompressionLevel, int BlockSize,string password)
  {
   //如果文件没有找到,则报错
   if (! System.IO.File.Exists(FileToZip))
   {
    throw new System.IO.FileNotFoundException("The specified file " + FileToZip + " could not be found. Zipping aborderd");
   }

   System.IO.FileStream StreamToZip = new System.IO.FileStream(FileToZip,System.IO.FileMode.Open , System.IO.FileAccess.Read);
   System.IO.FileStream ZipFile = System.IO.File.Create(ZipedFile);
   ZipOutputStream ZipStream = new ZipOutputStream(ZipFile);
   ZipEntry ZipEntry = new ZipEntry("ZippedFile");
   ZipStream.PutNextEntry(ZipEntry);
   ZipStream.SetLevel(CompressionLevel);
   byte[] buffer = new byte[BlockSize];
   System.Int32 size =StreamToZip.Read(buffer,0,buffer.Length);
   ZipStream.Write(buffer,0,size);
   try
   {
    while (size < StreamToZip.Length)
    {
     int sizeRead =StreamToZip.Read(buffer,0,buffer.Length);
     ZipStream.Write(buffer,0,sizeRead);
     size += sizeRead;
    }
   }
   catch(System.Exception ex)
   {
    throw ex;
   }
   ZipStream.Finish();
   ZipStream.Close();
   StreamToZip.Close();
  }

  public void ZipFileMain(string[] args)
  {
   //string[] filenames = Directory.GetFiles(args[0]);
   string[] filenames = new string[]{args[0]};
 
   Crc32 crc = new Crc32();
   ZipOutputStream s = new ZipOutputStream(File.Create(args[1]));

   s.SetLevel(6); // 0 - store only to 9 - means best compression

   foreach (string file in filenames)
   {
    //打开压缩文件
    FileStream fs = File.OpenRead(file);
    byte[] buffer = new byte[fs.Length];
    fs.Read(buffer, 0, buffer.Length);
    ZipEntry entry = new ZipEntry(file);

    entry.DateTime = DateTime.Now;

    // set Size and the crc, because the information
    // about the size and crc should be stored in the header
    // if it is not set it is automatically written in the footer.
    // (in this case size == crc == -1 in the header)
    // Some ZIP programs have problems with zip files that don't store
    // the size and crc in the header.
    entry.Size = fs.Length;
    fs.Close();

    crc.Reset();
    crc.Update(buffer);

    entry.Crc = crc.Value;

    s.PutNextEntry(entry);

    s.Write(buffer, 0, buffer.Length);

   }
   s.Finish();
   s.Close();
  }
 }
}

// ---------------------------------------------
// 4.WebForm1.aspx.cs
//-------------------------------------------

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

namespace WebZipUnzip
{
 ///
 /// Summary description for WebForm1.
 ///
 public class WebForm1 : System.Web.UI.Page
 {
  protected System.Web.UI.WebControls.Button Button1;
  protected System.Web.UI.HtmlControls.HtmlInputFile File1;
  protected System.Web.UI.WebControls.Button Button2;

  private void Page_Load(object sender, System.EventArgs e)
  {
   // Put user code to initialize the page here
  }

  #region Web Form Designer generated code
  override protected void OnInit(EventArgs e)
  {
   //
   // CODEGEN: This call is required by the ASP.NET Web Form Designer.
   //
   InitializeComponent();
   base.OnInit(e);
  }

  ///
  /// Required method for Designer support - do not modify
  /// the contents of this method with the code editor.
  ///
  private void InitializeComponent()
  {
   this.Button1.Click += new System.EventHandler(this.Button1_Click);
   this.Button2.Click += new System.EventHandler(this.Button2_Click);
   this.Load += new System.EventHandler(this.Page_Load);

  }
  #endregion

  #region 压缩
  private void Button1_Click(object sender, System.EventArgs e)
  {
   string []FileProperties=new string[2];
   string fullName=this.File1.PostedFile.FileName;//C:\test\a.txt
   string destPath=System.IO.Path.GetDirectoryName(fullName);//C:\test
   //待压缩文件
   FileProperties[0]=fullName;

   //压缩后的目标文件
   FileProperties[1]= destPath +"\\"+ System.IO.Path.GetFileNameWithoutExtension(fullName) + ".zip";
   ZipClass Zc=new ZipClass();
   Zc.ZipFileMain(FileProperties);

   //删除压缩前的文件
   System.IO.File.Delete(fullName);
  }

  #endregion

  #region 解压
  private void Button2_Click(object sender, System.EventArgs e)
  {
   string fullName=this.File1.PostedFile.FileName;//C:\test\a.zip
   //解压文件
   //AttachmentUnZip.UpZip(fullName);

   // string[] FileProperties = new string[2];
   // FileProperties[0] = fullName;//待解压的文件
   // FileProperties[1] = System.IO.Path.GetDirectoryName(fullName);//解压后放置的目标目录
   // UnZipClass UnZc=new UnZipClass();
   // UnZc.UnZip(FileProperties);
   string dir = System.IO.Path.GetDirectoryName(fullName);
   string fileName = System.IO.Path.GetFileName(fullName);
   UnZipClass.UnZipFile(fileName, dir);
  }
  #endregion
 }
}



添加到del.icio.us 添加到新浪ViVi 添加到百度搜藏 添加到POCO网摘 添加到天天网摘365Key 添加到和讯网摘 添加到天极网摘 添加到黑米书签 添加到QQ书签 添加到雅虎收藏 添加到奇客发现 diigo it 添加到饭否 添加到飞豆订阅 添加到抓虾收藏 添加到鲜果订阅 digg it 貼到funP 添加到有道阅读 Live Favorites 添加到Newsvine 打印本页 用Email发送本页 在Facebook上分享


Disclaimer Privacy Policy About us Site Map

If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)
Copyright ©2011-
uuhomepage.com, Inc. All rights reserved.