从压缩包文件读取指定文件内容

一些配置: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++->预处理器->预处理器定义

    

猜你喜欢

转载自blog.csdn.net/github_38641765/article/details/79835847
今日推荐