原文:
但是原文中遞迴獲取檔案資料時有問題,做了小改動。
using icsharpcode.sharpziplib.checksum;
using icsharpcode.sharpziplib.zip;
///view code///所有檔案快取
///
private
static list files = new list();
//////
所有空目錄快取
///
private
static list paths = new list();
#region 壓縮單個檔案
//////壓縮單個檔案
///
///要壓縮的檔案
///壓縮後的檔案全名
///壓縮程度,範圍0-9,數值越大,壓縮程式越高
///分塊大小
public
static
void zipfile(string filetozip, string zipedfile, int compressionlevel, int
blocksize)
filestream streamtozip = new
filestream(filetozip, filemode.open, fileaccess.read);
filestream zipfile =file.create(zipedfile);
zipoutputstream zipstream = new
zipoutputstream(zipfile);
zipentry zipentry = new
zipentry(filetozip);
zipstream.putnextentry(zipentry);
zipstream.setlevel(compressionlevel);
byte buffer = new
byte
[blocksize];
int size = streamtozip.read(buffer, 0
, buffer.length);
zipstream.write(buffer,
0, size);
try }
catch
(exception ex)
zipstream.finish();
zipstream.close();
streamtozip.close();
gc.collect();
}#endregion
#region 壓縮目錄所有檔案(遞迴)
//////壓縮目錄(包括子目錄及所有檔案)
///
///要壓縮的根目錄
///儲存路徑
///壓縮程度,範圍0-9,數值越大,壓縮程式越高
public
static
void zipfilefromdirectory(string rootpath, string destinationpath, int
compresslevel)
*///
string rootmark = rootpath.substring(0, rootpath.lastindexof("\\") + 1);
//得到當前路徑的位置,以備壓縮時將所壓縮內容轉變成相對路徑。
string rootmark = rootpath + "
\\";//
得到當前路徑的位置,以備壓縮時將所壓縮內容轉變成相對路徑。
crc32 crc = new
crc32();
zipoutputstream outputstream = new
zipoutputstream(file.create(destinationpath));
outputstream.setlevel(compresslevel);
//0 - store only to 9 - means best compression
foreach (string file in
files)
files.clear();
foreach (string emptypath in
paths)
paths.clear();
outputstream.finish();
outputstream.close();
gc.collect();
}#endregion
#region 獲取目錄下的所有檔案及資料夾,分別存入files及paths
//////取得目錄下所有檔案及資料夾,分別存入files及paths
///
///根目錄
private
static
void getalldirectories(string
rootpath)
string filess =directory.getfiles(rootpath);
foreach (string file in
filess)
if (directory.getdirectories(rootpath).length == filess.length && filess.length == 0)//
如果是空目錄
}#endregion
#region 解壓縮檔案(壓縮檔案中含有子目錄)
//////解壓縮檔案(壓縮檔案中含有子目錄)
///
///待解壓縮的檔案路徑
///解壓縮到指定目錄
///解壓後的檔案列表
public
static list unzip(string zipfilepath, string
unzippath)
zipinputstream s = new
zipinputstream(file.openread(zipfilepath));
zipentry theentry;
while ((theentry = s.getnextentry()) != null
)
if (filename !=string.empty)
else
}streamwriter.close();}}
s.close();
gc.collect();
return
unzipfiles;
}#endregion
#region 獲取壓縮檔案的檔案型別.rar或.zip
public
static
string getzipfileextention(string
filefullname)
//extension string
string ext =filefullname.substring(index);
if (ext == "
.rar
" || ext == "
.zip")
else
}#endregion
檔案幫助類
public class filehelper else console.writeline request header console.writeline ctx.request.headers.tostring 設定返回內容的mime型別 content disposition attachm...
C zip檔案的解壓與壓縮
2 在專案中新增相關檔案 在debug中新增zlib1.dll檔案,其他檔案載入到專案中 3 實現的 pragma comment lib,zlib1 壓縮檔案 int compress char destname,const char srcname 壓縮檔案時的源buffer file fp 開...
C zip壓縮檔案的功能
using system using system.collections.generic using system.io using icsharpcode.sharpziplib.checksums using icsharpcode.sharpziplib.zip namespace buil...