C zip檔案操作幫助類

2022-01-13 22:47:46 字數 3605 閱讀 3830

原文: 

但是原文中遞迴獲取檔案資料時有問題,做了小改動。 

using icsharpcode.sharpziplib.checksum; 

using icsharpcode.sharpziplib.zip; 

///

///所有檔案快取

///

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

view code

檔案幫助類

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...