需要SharpZipLib引用,ASP.NET 在線壓縮與在線解壓縮源碼:
using System;
using System.IO;
using ICSharpCode.SharpZipLib.Checksums;
using ICSharpCode.SharpZipLib.Zip;
using ICSharpCode.SharpZipLib.Zip.Compression;
using ICSharpCode.SharpZipLib.Zip.Compression.Streams;
/// <summary>
/// 2005-7-9
/// 垃圾豬
/// ewebapp.net
/// </summary>
namespace eWebapp.Upload
{
/// <summary>
/// 壓縮解壓處理。
/// </summary>
public class eZip
{
#region 私有域
private string zipname = string.Empty;
private string password = string.Empty;
private int level = 9;
private string unzipdir = string.Empty;
private Crc32 crc;
ZipOutputStream s;
#endregion
#region 屬性
/// <summary>
/// 壓縮文件名稱
/// </summary>
public string Zipname
{
set{ zipname = value;}
}
/// <summary>
/// 解壓文件夾
/// </summary>
public string Unzipdir
{
set { unzipdir = value;}
}
/// <summary>
/// 壓縮文件密碼
/// </summary>
public string Password
{
set {password = value;}
}
/// <summary>
/// 壓縮級別
/// </summary>
public int Level
{
set {level = value;}
}
public eZip()
{
//
// TODO: 在此處添加構造函數邏輯
//
}
#endregion
/// <summary>
/// 創建壓縮文件
/// </summary>
public void CreateZip()
{
crc = new Crc32();
s = new ZipOutputStream(File.Create(this.zipname));
s.SetLevel(level);
s.Password = password;
}
/// <summary>
/// 結束操作
/// </summary>
public void FinishZip()
{
s.Finish();
s.Close();
}
/// <summary>
/// 增加一個文件
/// </summary>
/// <param name="_crc"></param>
/// <param name="_s"></param>
/// <param name="_filename"></param>
/// <param name="_filesize"></param>
/// <param name="_buffer"></param>
private void addFile(Crc32 _crc,ZipOutputStream _s,string _filename,long _filesize,byte[] _buffer)
{
// 添加一個文件到壓縮文件中
ZipEntry entry = new ZipEntry(_filename);
entry.DateTime = DateTime.Now;
entry.Size = _filesize;
_crc.Reset();
_crc.Update(_buffer);
entry.Crc = _crc.Value;
_s.PutNextEntry(entry);
_s.Write(_buffer, 0, _buffer.Length);
}
/// <summary>
/// 添加一個文件到壓縮文件中
/// </summary>
/// <param name="_filename"></param>
public void AddFile(string _filename)
{
FileStream fs = File.OpenRead(_filename);
byte[] buffer = new byte[fs.Length];
fs.Read(buffer, 0, buffer.Length);
string filename = System.IO.Path.GetFileName(_filename);
long m_fLength = fs.Length;
fs.Close();
addFile(this.crc,this.s,filename,m_fLength,buffer);
}
/// <summary>
/// 新建文本文件
/// </summary>
/// <param name="_crc"></param>
/// <param name="_s"></param>
/// <param name="_filename"></param>
/// <param name="_text"></param>
private void addText(Crc32 _crc,ZipOutputStream _s,string _filename,string _text)
{
byte[] text = System.Text.Encoding.Default.GetBytes(_text);
addFile(_crc,_s,_filename,text.Length,text);
}
/// <summary>
/// 添加一個指定內容的文本文件到壓縮文件中
/// </summary>
/// <param name="_filename"></param>
/// <param name="_text"></param>
public void AddText(string _filename,string _text)
{
addText(this.crc,this.s,_filename,_text);
}
/// <summary>
/// 解壓處理
/// </summary>
public void Unzip()
{
string unzipdirectoryroot = this.unzipdir;
// 調用組件中讀取壓縮文件的對象
ZipInputStream s = new ZipInputStream(File.OpenRead(this.zipname));
s.Password = this.password;
ZipEntry theEntry;
while ((theEntry = s.GetNextEntry()) != null)
{
// 當前解壓到的目錄,Path.GetDirectoryName(theEntry.Name)爲提取壓縮文件目錄
string directoryName = Path.Combine(unzipdirectoryroot,Path.GetDirectoryName(theEntry.Name));
// 當前正在解壓的文件
string fileName = Path.Combine(directoryName,Path.GetFileName(theEntry.Name));
// 創建目錄
Directory.CreateDirectory(directoryName);
if (fileName != String.Empty)
{
try
{
// 創建解壓文件
FileStream streamWriter = File.Create(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();
}
catch
{
}
}
}
s.Close();
}
}
}
轉載於:https://www.cnblogs.com/undefine/archive/2010/05/21/1741063.html