2、在專案中新增相關檔案
在debug中新增zlib1.dll檔案,其他檔案載入到專案中
3、實現的**
#pragma comment(lib,"zlib1")
//壓縮檔案
int compress(char * destname, const char *srcname)
; //壓縮檔案時的源buffer
file* fp; //開啟欲壓縮檔案時檔案的指標
file* fp1; //建立壓縮檔案時的指標
errno_t err; //錯誤變數的定義
err = fopen_s(&fp, srcname, "r+b");
//獲取檔案長度
long cur = ftell(fp);
fseek(fp, 0l, seek_end);
long filelength = ftell(fp);
fseek(fp, cur, seek_set);
//讀取檔案到buffer
fread(sourcebuffer, filelength, 1, fp);
fclose(fp);
//壓縮buffer中的資料
ulongf sourcebufferlen = 102400;
char* destbuffer = (char*)::calloc((uint)sourcebufferlen, 1);
err = compress((bytef*)destbuffer, (ulongf*)&sourcebufferlen, (const bytef*)sourcebuffer, (ulongf)filelength);
if (err != z_ok)
//建立乙個檔案用來寫入壓縮後的資料
err = fopen_s(&fp1, destname, "w+b");
if (!fp1)
fwrite(destbuffer, sourcebufferlen, 1, fp1);
cout << "壓縮結束" << endl;
fclose(fp1);
return 0;
}//解壓縮檔案
int uncompress(char * destname, const char *srcname)
; //解壓縮檔案時的源buffer
file* fp3; //開啟欲解壓檔案的檔案指標
file* fp4; //建立解壓檔案的檔案指標
errno_t err; //錯誤變數的定義
//開啟欲解壓的檔案
err = fopen_s(&fp3, srcname, "r+b");
if (err)
//獲取欲解壓檔案的大小
long ucur = ftell(fp3);
fseek(fp3, 0l, seek_end);
long ufilelength = ftell(fp3);
fseek(fp3, ucur, seek_set);
//讀取檔案到buffer
fread(usorcebuffer, ufilelength, 1, fp3);
fclose(fp3);
ulongf udestbufferlen = 1024000;//此處長度需要足夠大以容納解壓縮後資料
char* udestbuffer = (char*)::calloc((uint)udestbufferlen, 1);
//解壓縮buffer中的資料
/*int uncompress(bytef *dest, ulongf *destlen, const bytef *source, ulong sourcelen);
uncompress 函式將 source 緩衝區的內容解壓縮到 dest 緩衝區。
sourcelen 是 source 緩衝區的大小(以位元組計)。注意函式的第二
個引數 destlen 是傳址呼叫。當呼叫函式時,destlen 表示 dest
緩衝區的大小, dest 緩衝區要足以容下解壓後的資料。在進行解
壓縮時,需要提前知道被壓縮的資料解壓出來會有多大。這就要求
在進行壓縮之前,儲存原始資料的大小(也就是解壓後的資料的大
小)。這不是 zlib 函式庫的功能,需要我們做額外的工作。當函式
退出後, destlen 是解壓出來的資料的實際大小。
*/err = uncompress((bytef*)udestbuffer, (ulongf*)&udestbufferlen, (bytef*)usorcebuffer, (ulongf)ufilelength);
if (err != z_ok)
//建立乙個檔案用來寫入解壓縮後的資料
err = fopen_s(&fp4, destname, "wb");
if (err)
//printf("寫入資料... \n");
cout << "解壓資料成功!" << endl;
/*size_t fwrite(const void* buffer, size_t size, size_t count, file* stream );
這是fwrite的msdn標準參數列,其中buffer是需要向檔案中寫入的內容在記憶體中的首位址指標,
size是待寫入內容的每個元素的位元組數,count是要寫多少個元素,stream 是檔案指標
*/fwrite(udestbuffer, udestbufferlen, 1, fp4);
//cout << udestbuffer << endl;
fclose(fp4);
return 0;}
C zip壓縮檔案的功能
using system using system.collections.generic using system.io using icsharpcode.sharpziplib.checksums using icsharpcode.sharpziplib.zip namespace buil...
檔案壓縮與解壓
檔案的壓縮 1.讀取檔案的內容 2.統計每個字元出現的次數 int read while read bis.read 1 直至讀到檔案結束 arrays為運算元組的工具類 collections為操作集合工具類 bis.close 3.構建哈弗曼樹,生成哈夫曼編碼 if node.getleftno...
檔案壓縮與解壓
檔案壓縮與解壓思想 1 統計字元出現次數,結合最小堆的性質生成哈夫曼樹 2 對葉節點進行編碼,結點左邊編 0,右邊編1 3 讀取檔案,用哈夫曼編碼代替字元產生新的字元,即壓縮 4 讀取壓縮檔案,進行哈夫曼編碼的解讀產生相應字元,即解壓 例如,對以下資料生成哈夫曼樹,以及產生相應的哈夫曼編碼 自己寫的...