1. 程式人生 > >從壓縮包檔案讀取指定檔案內容

從壓縮包檔案讀取指定檔案內容

一些配置: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++->前處理器->前處理器定義