從.NET 2.0開始,微軟提供了一個 System.IO.Compression 的NameSpace,下含有 GZipStream 和 DeflateStream,都具有壓縮和解壓功能,但是,確不支援 zip 和 rar等常用的壓縮檔。因為rar是有著作權的,不支援有情可原,但zip是開源的,也不支援就有點自私了(估計微軟是為了自己的cab格式)
對於 rar 格式,我們可以直接利用WinRAR提供的rar.exe/unrar.exe(此檔案在winrar的安裝目錄下,是一個console程式),這種情況,只能用於 winform 或者 在提權 的情況下,才能用於 asp.net ;
對於 zip 格式,我們這裡推薦是用原生的C#類庫,這種方式,可以適用於asp.net(要有目錄的寫入權限),我推薦大家使用開源免費的 SharpZipLib 。
對於 rar.exe 的解壓和壓縮,下面先給出它的 命令列格式對照表,便於瞭解:
rar命令列的使用方法:
rar <命令> -<開關 1> -<開關 N> <壓縮檔> <檔案...> <@列表檔案...> <解壓路徑\>
rar的命令列表:
rar 的開關列表:
rar使用的例子:
1、rar a file file.ext
如果file.rar不存在將建立file.rar檔案;如果file.rar壓縮包中已有file.ext,將更新壓縮包中的file.ext
2、rar a file d:\*.ext
將d盤下所有ext檔案(不包括自檔案夾)添加到壓縮包中
3、rar x Fonts *.ttf
從壓縮檔中解壓 *.ttf 字型檔到當前檔案夾
4、rar x Fonts *.ttf NewFonts\
從壓縮檔中解壓 *.ttf 字型檔到 NewFonts 目錄下
5、rar e -p密碼 test.rar
將有密碼test.rar檔案,解壓到當前檔案夾
C#調用rar.exe解壓一個rar檔案到系統的臨時目錄:
//取得系統臨時目錄string sysTempDir = Path.GetTempPath();//要解壓的檔案路徑,請自行設定string rarFilePath = @"d:\test.rar";//確定要解壓到的目錄,是系統臨時檔案夾下,與原壓縮檔同名的目錄裡string unrarDestPath = Path.Combine(sysTempDir, Path.GetFileNameWithoutExtension(rarFilePath));//組合出需要shell的完整格式string shellArguments = string.Format("x -o+ \"{0}\" \"{1}\\\"", rarFilePath, unrarDestPath);//用Process調用using (Process unrar = new Process()){ unrar.StartInfo.FileName = "rar.exe"; unrar.StartInfo.Arguments = shellArguments; //隱藏rar本身的視窗 unrar.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; unrar.Start(); //等待解壓完成 unrar.WaitForExit(); unrar.Close();}//統計解壓後的目錄和檔案數DirectoryInfo di = new DirectoryInfo(unrarDestPath);MessageBox.Show(string.Format("解壓完成,共解壓出:{0}個目錄,{1}個檔案", di.GetDirectories().Length, di.GetFiles().Length));
例子代碼下載
原文:http://www.zu14.cn/2008/12/31/net_package/