從壓縮包檔案讀取指定檔案內容
阿新 • • 發佈:2019-01-04
一些配置:VC++目錄->包含目錄&&庫目錄 :新增F:\zlib-1.2.11\contrib\minizip(因為用到了zlib庫的unzip的檔案)
連結器->輸入:新增zlibwapi.lib
連結器->常規->附加庫目錄:新增F:\zlib-1.2.11\contrib\vstudio\vc11\x64\ZlibDllDebug\(這是我存放zlib的碟符)
#include "stdio.h" #include "unzip.h" #include "string.h" int main(int argc, char* argv[]) { int err; char szFileName[255]; //宣告結構體 unz_global_info global_info; unz_file_info file_info; //開啟壓縮檔案 unzFile uzf = unzOpen64(argv[1]); //定位到指定檔案 err = unzLocateFile(uzf, "classes.dex", 0); if (UNZ_OK != err) { printf("GetFileInZip unzLocateFile failed... error:%d\n"); return err; } //獲取當前選擇的內部壓縮檔案的資訊 err = unzGetCurrentFileInfo(uzf, &file_info, szFileName, sizeof(szFileName), NULL, 0, NULL, 0); if (UNZ_OK != err) { printf("unzGetCurrentFileInfo failed... error:%d\n", err); return err; } //選擇開啟定位到的檔案 err = unzOpenCurrentFile(uzf); if (err != UNZ_OK) { printf("開啟指定檔案失敗!"); return 0; } //讀取內容 int len = file_info.uncompressed_size; char * ptr_arr; ptr_arr = (char*)malloc(len); //動態分配記憶體 err = unzReadCurrentFile(uzf, ptr_arr, file_info.uncompressed_size); FILE* fp = fopen("./1.dex","wb+"); fwrite(ptr_arr,1,len,fp); //每次寫入1位元組的內容,總共寫入len次 if (err < 0) { printf("unzReadCurrentFile failed... error:%d\n", err); } //關閉檔案 unzCloseCurrentFile(uzf); unzClose(uzf); fclose(fp); return 0; }
遇見的一些小錯誤:
VS2015編譯出現的問題:新增_CRT_SECURE_NO_WARNINGS到C/C++->前處理器->前處理器定義