现在的位置: 首页 > 综合 > 正文

MTK zlib uncompress 解压文件

2013年10月13日 ⁄ 综合 ⁄ 共 1200字 ⁄ 字号 评论关闭

    

     MTK的工程使用的是07B的,如果是其他工程的话,应该是需要适配一下的。

 

     还需要说明的是我在.gz的开头分配了4字节用来保存原始文件的大小。看代码应该就知道了。

 

void zlibEnter()
{
	appzlib_register(malloc,free);
	zlibuncompress();
}

 

 

void zlibuncompress()
{
	char *compr, *uncompr,*comprlen;
	unsigned long comprLen, uncomprLen;
	FILE *fpin, *fpout;
	int file_len_dest,src_len_src = 0;
	int wsize = 0;
	int err;
	fpin = fopen("C:\\a.gz", "rb");  //读取压缩文件
	fpout = fopen("C:\\a_dest.txt", "wb");//将压缩内容输出到此文件
	if(fpin && fpout)
	{
		fseek(fpin, 4, SEEK_END);
		file_len_dest = ftell(fpin); //得到压缩文件大小
		fseek(fpin, 0, SEEK_SET);
		if(file_len_dest > 0)
		{
			comprlen = malloc(sizeof(file_len_dest)); //分配读取前4字节原始文件长度的缓存区
			compr = malloc((uInt)file_len_dest); //分配读取压缩文件缓存区
			if (compr == Z_NULL || uncompr == Z_NULL) 
			{
				fprintf(stderr, "内存分配失败\n");
				return 1;
			}
			fread(comprlen, 4, 1, fpin);//读取前4字节原始文件长度
			src_len_src = *((int *)comprlen);
			uncompr = malloc((uInt)src_len_src);//分配读取解压后写入文件的缓存区
			fseek(fpin, 4, SEEK_SET);//设置从4字节之后读
			fread(compr, file_len_dest, 1, fpin);//读取压缩文件内容
			err = uncompress(uncompr, &uncomprLen, compr, comprLen);//解压
			if (err != Z_OK) 
			{ 
				fprintf(stderr, "解压错误\n");
			}
			else
			{
				wsize = fwrite(uncompr,src_len_src,1,fpout);//将解压之后的内容写入指定文件
			}
			fclose(fpin);
			fclose(fpout);
			free(compr);
			free(comprlen);
			free(uncompr);
		 } 
		 else
		 {
			fprintf(stderr, "输入文件长度为0");
		 }
	}
	else
	{
		printf("打开文件出错\n");
	}
}

    参考了网络上部分代码,已经验证,能正常进行解压。

抱歉!评论已关闭.