读取ZIP文件

// ConsoleApplication2.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <fstream>
#include <Windows.h>

using namespace std;

#define SECTION_LENGTH			0x0000002E	//每个SESION的长度, 不带名字
#define SECTION_DES_LENGTH_POS	0x00000014	//压缩后长度的位置(DWORD, 4字节)
#define SECTION_SRC_LENGTH_POS	0x00000018	//压缩前长度的位置(DWORD, 4字节)
#define SECTION_NAME_LENGTH_POS	0x0000001C	//名字长度
#define CONTENT_POS				0x0000002A	//内容存储的位置(DWORD, 4字节)



void ReadFileInfo(char *FileName)
{
	fstream f(FileName, ios::in|ios::binary);
	if ( !f )
	{
		printf("文件【%s】不存在");
		return;
	}

	streamsize dwResourceSize = 0;
	f.seekg(0, ios::end);
	dwResourceSize = f.tellg(); 
	printf("资源大小: %08d\n", dwResourceSize);

	//--获取索引区起始位置
	DWORD dwStartPost = 0;
	f.seekg(dwResourceSize - 6);
	f.read((char *)&dwStartPost, sizeof(dwStartPost));
	printf("索引区起始地址: %08X\n", dwStartPost);

	//获取文件数量
	WORD dwFileNum = 0;
	f.seekg(dwResourceSize - 12);
	f.read((char *)&dwFileNum, sizeof(dwFileNum));
	printf("文件数量: %08X\n", dwFileNum);

	for (int i = 0; i < dwFileNum; i++)
	{
		f.seekg(dwStartPost + SECTION_DES_LENGTH_POS);
		DWORD dwDesLen = 0;
		f.read((char *)&dwDesLen, sizeof(dwDesLen));

		f.seekg(dwStartPost + SECTION_SRC_LENGTH_POS);
		DWORD dwSrcLen = 0;
		f.read((char *)&dwSrcLen, sizeof(dwSrcLen));

		f.seekg(dwStartPost + SECTION_NAME_LENGTH_POS);
		DWORD dwNameLen = 0;
		f.read((char *)&dwNameLen, sizeof(dwNameLen));
	
		f.seekg(dwStartPost + SECTION_LENGTH);		
		TCHAR sFileName[MAX_PATH] = { 0 };
		f.read((char *)sFileName, dwNameLen);

		printf("原长度: %08X 压缩长度: %08X 文件名长度: %08X 文件名: %s\n", dwSrcLen, dwDesLen, dwNameLen, sFileName);

		dwStartPost = dwStartPost + SECTION_LENGTH + dwNameLen;
	}
	f.close();
}

int _tmain(int argc, _TCHAR* argv[])
{
	ReadFileInfo("MTServerSrc.zip");
	system("pause");
	return 0;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值