asp.net SharpZipLib的壓縮與解壓?jiǎn)栴}
具體壓縮、解壓代碼實(shí)現(xiàn)參照網(wǎng)絡(luò)上的代碼,貼出概要代碼:
/// <summary>
/// 壓縮文件
/// </summary>
/// <param name="sourceFilePath">源文件路徑</param>
/// <param name="destinationPath">壓縮文件后的保存路徑</param>
/// <returns>壓縮是否成功</returns>
public bool Compress(string sourceFilePath, string destinationPath)
{
try
{
string[] filenames = Directory.GetFiles(sourceFilePath);
using (ZipOutputStream zs = new ZipOutputStream(File.Create(destinationPath)))
{
zs.SetLevel(9);
byte[] buffer = new byte[4096];
foreach (string file in filenames)
{
ZipEntry entry = new ZipEntry(Path.GetFileName(file));
entry.DateTime = DateTime.Now;
zs.PutNextEntry(entry);
using (FileStream fs = File.OpenRead(file))
{
int sourceBytes;
do
{
sourceBytes = fs.Read(buffer, 0, buffer.Length);
zs.Write(buffer, 0, sourceBytes);
}
while (sourceBytes > 0);
}
}
zs.Finish();
zs.Flush();
zs.Close();
}
}
catch (Exception)
{
return false;
}
return true;
} public bool DeCompress(string sourceFilePath, string destinationPath)
{
try
{
using (ZipInputStream zs = new ZipInputStream(File.OpenRead(sourceFilePath)))
{
ZipEntry entry = null;
//解壓縮*.rar文件運(yùn)行至此處出錯(cuò):Wrong Local header signature: 0x21726152,解壓*.zip文件不出錯(cuò)
while ((entry = zs.GetNextEntry()) != null)
{
string directoryName = Path.GetDirectoryName(entry.Name);
string fileName = Path.GetFileName(entry.Name);
if (!string.IsNullOrEmpty(fileName))
{
using (FileStream streamWriter = File.Create(destinationPath + entry.Name))
{
int size = 2048;
byte[] data = new byte[size];
while (true)
{
size = zs.Read(data, 0, data.Length);
if (size > 0)
{
streamWriter.Write(data, 0, size);
}
else
{
break;
}
}
}
}
}
}
}
catch (System.Exception)
{
return false;
}
return true;
}
如果需解壓*.rar的壓縮文件在網(wǎng)絡(luò)也可以找到相關(guān)的實(shí)現(xiàn)代碼,概要代碼:
public bool DeCompressRAR(string sourceFilePath, string destinationPath)
{
try
{
string SeverDir = @"D:\Program Files\WinRAR";//rar.exe的要目錄
Process ProcessDecompression = new Process();
ProcessDecompression.StartInfo.FileName = SeverDir + "\\rar.exe";
Directory.CreateDirectory(sourceFilePath);
ProcessDecompression.StartInfo.Arguments = " X " + sourceFilePath + " " + destinationPath;
ProcessDecompression.Start();
while (!ProcessDecompression.HasExited)
{
//nothing to do here.
}
return true;
}
catch (System.Exception)
{
return false;
}
}
我本想利用FileUpload控件將上傳的壓縮文件解壓后保存至相對(duì)應(yīng)的目錄并更新數(shù)據(jù)庫(kù)文件目錄,后發(fā)現(xiàn)一些較好的用于上傳的開(kāi)源軟件:如NeatUpload,SWFUpload可以較方便的實(shí)現(xiàn)我的需求,遂沒(méi)有過(guò)多糾纏于SharpZipLib,可能關(guān)于SharpZipLib的壓縮與解壓有其它用法,不能被我誤導(dǎo),以上代碼是從網(wǎng)絡(luò)上整合出來(lái)的,因?yàn)樗^(guò)于重復(fù)和散亂。
相關(guān)文章
使用 Visual Studio 的“代碼度量值”來(lái)改進(jìn)代碼質(zhì)量
代碼度量是一組軟件度量值,使開(kāi)發(fā)人員可以更好地了解他們正在開(kāi)發(fā)的代碼.這篇文章主要介紹了通過(guò) Visual Studio 的“代碼度量值”來(lái)改進(jìn)代碼質(zhì)量,需要的朋友可以參考下2017-11-11
.net+FusionChart實(shí)現(xiàn)動(dòng)態(tài)顯示的柱狀圖和餅狀圖
這篇文章介紹了.net+FusionChart實(shí)現(xiàn)動(dòng)態(tài)顯示柱狀圖和餅狀圖的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-07-07
ASP.NET Core模仿中間件方式實(shí)現(xiàn)列表過(guò)濾功能
這篇文章介紹了ASP.NET Core模仿中間件方式實(shí)現(xiàn)列表過(guò)濾功能的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-07-07
在Global.asax文件里實(shí)現(xiàn)通用防SQL注入漏洞程序(適應(yīng)于post/get請(qǐng)求)
可使用Global.asax中的Application_BeginRequest(object sender, EventArgs e)事件來(lái)實(shí)現(xiàn)表單或者URL提交數(shù)據(jù)的獲取,獲取后傳給SQLInjectionHelper類(lèi)ValidUrlData方法來(lái)完成檢查2013-01-01
asp.net 圖片的讀寫(xiě)入庫(kù)實(shí)現(xiàn)代碼
asp.net對(duì)圖片的讀寫(xiě),實(shí)現(xiàn)將圖片保存到數(shù)據(jù)庫(kù)中,然后再讀取顯示的實(shí)現(xiàn)代碼。2009-11-11
.net開(kāi)發(fā)中幾個(gè)重要的認(rèn)識(shí)誤區(qū)小結(jié)
.net如今已經(jīng)很流行,成為趕時(shí)髦的程序員的首選。但是,大量剛剛接觸.net的程序員的確存在一定的認(rèn)識(shí)誤區(qū),這里先介紹一部分。2010-04-04
asp.net 從POST的數(shù)據(jù)流中提取參數(shù)和文件
按理,F(xiàn)orm提交的數(shù)據(jù),無(wú)論是application/x-www-form-urlencoded還是multipart/form-data(有附件時(shí)),都可在服務(wù)端通過(guò)Request.Form["name"]和Request.Files["name"]獲取到參數(shù)和上傳的文件。2010-02-02
關(guān)于前臺(tái)調(diào)用后臺(tái)事件__doPostBack函數(shù)
關(guān)于前臺(tái)調(diào)用后臺(tái)事件__doPostBack函數(shù)...2007-04-04
如何給asp.net core寫(xiě)個(gè)中間件記錄接口耗時(shí)
這篇文章主要給大家介紹了關(guān)于如何給asp.net core寫(xiě)個(gè)中間件記錄接口耗時(shí)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用asp.net core具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09

