亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? unzipper.cpp

?? 這是一款zip壓縮與解壓縮的編碼,可以通過調(diào)用里面壓縮函數(shù)和解壓縮函數(shù)對相應(yīng)的文件與文件夾進(jìn)行壓縮與解壓縮功能的操作
?? CPP
字號(hào):
// Unzipper.cpp: implementation of the CUnzipper class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "Unzipper.h"

#include "zlib\unzip.h"
#include "zlib\iowin32.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

const UINT BUFFERSIZE = 2048;

CUnzipper::CUnzipper(LPCTSTR szFilePath) : m_uzFile(0)
{
	OpenZip(szFilePath);
}

CUnzipper::~CUnzipper()
{
	CloseZip();
}

bool CUnzipper::CloseZip()
{
	unzCloseCurrentFile(m_uzFile);

	int nRet = unzClose(m_uzFile);
	m_uzFile = NULL;
	m_szOutputFolder[0] = 0;

	return (nRet == UNZ_OK);
}

// simple interface
bool CUnzipper::Unzip(bool bIgnoreFilePath)
{
	if (!m_uzFile)
		return FALSE;

	return UnzipTo(m_szOutputFolder, bIgnoreFilePath);
}

bool CUnzipper::UnzipTo(LPCTSTR szFolder, bool bIgnoreFilePath)
{
	if (!m_uzFile)
		return FALSE;

	if (!szFolder || !CreateFolder(szFolder))
		return FALSE;

	if (GetFileCount() == 0)
		return FALSE;

	if (!GotoFirstFile())
		return FALSE;

	// else
	do
	{
		if (!UnzipFile(szFolder, bIgnoreFilePath))
			return FALSE;
	}
	while (GotoNextFile());
	
	return TRUE;
}

// static version
bool CUnzipper::Unzip(LPCTSTR szFileName, LPCTSTR szFolder, bool bIgnoreFilePath)
{
	CUnzipper unz;

	if (!unz.OpenZip(szFileName))
		return FALSE;

	return unz.UnzipTo(szFolder, bIgnoreFilePath);
}

// extended interface
bool CUnzipper::OpenZip(LPCTSTR szFilePath)
{
	CloseZip();

	if (!szFilePath || !lstrlen(szFilePath))
		return false;

	// convert szFilePath to fully qualified path 
	char szFullPath[MAX_PATH];
	
	if (!GetFullPathName(szFilePath, MAX_PATH, szFullPath, NULL))
		return false;
	
	m_uzFile = unzOpen(szFullPath);
	
	if (m_uzFile)
	{
		char szDrive[_MAX_DRIVE], szFolder[MAX_PATH], szFName[_MAX_FNAME];
		
		_splitpath(szFullPath, szDrive, szFolder, szFName, NULL);
		_makepath(m_szOutputFolder, szDrive, szFolder, szFName, NULL);
	}

	return (m_uzFile != NULL);
}

bool CUnzipper::SetOutputFolder(LPCTSTR szFolder)
{
	DWORD dwAttrib = GetFileAttributes(szFolder);

	if (dwAttrib != 0xffffffff && !(dwAttrib & FILE_ATTRIBUTE_DIRECTORY))
		return FALSE;

	lstrcpy(m_szOutputFolder, szFolder);

	return CreateFolder(szFolder);
}

int CUnzipper::GetFileCount()
{
	if (!m_uzFile)
		return 0;

	unz_global_info info;

	if (unzGetGlobalInfo(m_uzFile, &info) == UNZ_OK)
	{
		return (int)info.number_entry;
	}

	return 0;
}

bool CUnzipper::GetFileInfo(int nFile, UZ_FileInfo& info)
{
	if (!m_uzFile)
		return FALSE;

	if (!GotoFile(nFile))
		return FALSE;

	return GetFileInfo(info);
}

bool CUnzipper::UnzipFile(int nFile, LPCTSTR szFolder, bool bIgnoreFilePath)
{
	if (!m_uzFile)
		return FALSE;

	if (!szFolder)
		szFolder = m_szOutputFolder;

	if (!GotoFile(nFile))
		return FALSE;

	return UnzipFile(szFolder, bIgnoreFilePath);
}

bool CUnzipper::GotoFirstFile(LPCTSTR szExt)
{
	if (!m_uzFile)
		return FALSE;

	if (!szExt || !lstrlen(szExt))
		return (unzGoToFirstFile(m_uzFile) == UNZ_OK);

	// else
	if (unzGoToFirstFile(m_uzFile) == UNZ_OK)
	{
		UZ_FileInfo info;

		if (!GetFileInfo(info))
			return FALSE;

		// test extension
		char szFExt[_MAX_EXT];
		_splitpath(info.szFileName, NULL, NULL, NULL, szFExt);

		if (szFExt)
		{
			if (lstrcmpi(szExt, szFExt + 1) == 0)
				return TRUE;
		}

		return GotoNextFile(szExt);
	}

	return FALSE;
}

bool CUnzipper::GotoNextFile(LPCTSTR szExt)
{
	if (!m_uzFile)
		return FALSE;

	if (!szExt || !lstrlen(szExt))
		return (unzGoToNextFile(m_uzFile) == UNZ_OK);

	// else
	UZ_FileInfo info;

	while (unzGoToNextFile(m_uzFile) == UNZ_OK)
	{
		if (!GetFileInfo(info))
			return FALSE;

		// test extension
		char szFExt[_MAX_EXT];
		_splitpath(info.szFileName, NULL, NULL, NULL, szFExt);

		if (szFExt)
		{
			if (lstrcmpi(szExt, szFExt + 1) == 0)
				return TRUE;
		}
	}

	return FALSE;

}

bool CUnzipper::GetFileInfo(UZ_FileInfo& info)
{
	if (!m_uzFile)
		return FALSE;

	unz_file_info uzfi;

	ZeroMemory(&info, sizeof(info));
	ZeroMemory(&uzfi, sizeof(uzfi));

	if (UNZ_OK != unzGetCurrentFileInfo(m_uzFile, &uzfi, info.szFileName, MAX_PATH, NULL, 0, info.szComment, MAX_COMMENT))
		return FALSE;

	// copy across
	info.dwVersion = uzfi.version;	
	info.dwVersionNeeded = uzfi.version_needed;
	info.dwFlags = uzfi.flag;	
	info.dwCompressionMethod = uzfi.compression_method; 
	info.dwDosDate = uzfi.dosDate;  
	info.dwCRC = uzfi.crc;	 
	info.dwCompressedSize = uzfi.compressed_size; 
	info.dwUncompressedSize = uzfi.uncompressed_size;
	info.dwInternalAttrib = uzfi.internal_fa; 
	info.dwExternalAttrib = uzfi.external_fa; 

	// replace filename forward slashes with backslashes
	int nLen = lstrlen(info.szFileName);

	while (nLen--)
	{
		if (info.szFileName[nLen] == '/')
			info.szFileName[nLen] = '\\';
	}

	// is it a folder?
	info.bFolder = ((info.dwExternalAttrib & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY);

	return TRUE;
}

bool CUnzipper::UnzipFile(LPCTSTR szFolder, bool bIgnoreFilePath)
{
	if (!m_uzFile)
		return FALSE;

	if (!szFolder)
		szFolder = m_szOutputFolder;

	if (!CreateFolder(szFolder))
		return FALSE;

	UZ_FileInfo info;
	GetFileInfo(info);

	// if the item is a folder then create it and return 'TRUE'
	if (info.bFolder)
	{
		char szFolderPath[MAX_PATH];
		_makepath(szFolderPath, NULL, m_szOutputFolder, info.szFileName, NULL);

		return CreateFolder(szFolderPath);
	}

	// build the output filename
	char szFilePath[MAX_PATH];

	if (bIgnoreFilePath)
	{
		char szFName[_MAX_FNAME], szExt[_MAX_EXT];

		_splitpath(info.szFileName, NULL, NULL, szFName, szExt);
		_makepath(info.szFileName, NULL, NULL, szFName, szExt);
	}

	_makepath(szFilePath, NULL, szFolder, info.szFileName, NULL);

	// open the input and output files
	if (!CreateFilePath(szFilePath))
		return FALSE;

	HANDLE hOutputFile = ::CreateFile(szFilePath, 
										GENERIC_WRITE,
										0,
										NULL,
										CREATE_ALWAYS,
										FILE_ATTRIBUTE_NORMAL,
										NULL);

	if (INVALID_HANDLE_VALUE == hOutputFile)
		return FALSE;

	if (unzOpenCurrentFile(m_uzFile) != UNZ_OK)
		return FALSE;

	// read the file and output
	int nRet = UNZ_OK;
	char pBuffer[BUFFERSIZE];

	do
	{
		nRet = unzReadCurrentFile(m_uzFile, pBuffer, BUFFERSIZE);

		if (nRet > 0)
		{
			// output
			DWORD dwBytesWritten = 0;

			if (!::WriteFile(hOutputFile, pBuffer, nRet, &dwBytesWritten, NULL) ||
				dwBytesWritten != (DWORD)nRet)
			{
				nRet = UNZ_ERRNO;
				break;
			}
		}
	}
	while (nRet > 0);

	CloseHandle(hOutputFile);
	unzCloseCurrentFile(m_uzFile);

	if (nRet == UNZ_OK)
		SetFileModTime(szFilePath, info.dwDosDate);

	return (nRet == UNZ_OK);
}

bool CUnzipper::GotoFile(int nFile)
{
	if (!m_uzFile)
		return FALSE;

	if (nFile < 0 || nFile >= GetFileCount())
		return FALSE;

	GotoFirstFile();

	while (nFile--)
	{
		if (!GotoNextFile())
			return FALSE;
	}

	return TRUE;
}

bool CUnzipper::GotoFile(LPCTSTR szFileName, bool bIgnoreFilePath)
{
	if (!m_uzFile)
		return FALSE;

	// try the simple approach
	if (unzLocateFile(m_uzFile, szFileName, 2) == UNZ_OK)
		return TRUE;

	else if (bIgnoreFilePath)
	{ 
		// brute force way
		if (unzGoToFirstFile(m_uzFile) != UNZ_OK)
			return FALSE;

		UZ_FileInfo info;

		do
		{
			if (!GetFileInfo(info))
				return FALSE;

			// test name
			char szFName[_MAX_FNAME], szName[_MAX_FNAME], szExt[_MAX_EXT];

			_splitpath(info.szFileName, NULL, NULL, szName, szExt);
			_makepath(szFName, NULL, NULL, szName, szExt);

			if (lstrcmpi(szFileName, szFName) == 0)
				return TRUE;
		}
		while (unzGoToNextFile(m_uzFile) == UNZ_OK);
	}

	// else
	return FALSE;
}

bool CUnzipper::CreateFolder(LPCTSTR szFolder)
{
	if (!szFolder || !lstrlen(szFolder))
		return FALSE;

	DWORD dwAttrib = GetFileAttributes(szFolder);

	// already exists ?
	if (dwAttrib != 0xffffffff)
		return ((dwAttrib & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY);

	// recursively create from the top down
	char* szPath = _strdup(szFolder);
	char* p = strrchr(szPath, '\\');

	if (p) 
	{
		// The parent is a dir, not a drive
		*p = '\0';
			
		// if can't create parent
		if (!CreateFolder(szPath))
		{
			free(szPath);
			return FALSE;
		}
		free(szPath);

		if (!::CreateDirectory(szFolder, NULL)) 
			return FALSE;
	}
	
	return TRUE;
}

bool CUnzipper::CreateFilePath(LPCTSTR szFilePath)
{
	char* szPath = _strdup(szFilePath);
	char* p = strrchr(szPath,'\\');

	bool bRes = FALSE;

	if (p)
	{
		*p = '\0';

		bRes = CreateFolder(szPath);
	}

	free(szPath);

	return bRes;
}

bool CUnzipper::SetFileModTime(LPCTSTR szFilePath, DWORD dwDosDate)
{
	HANDLE hFile = CreateFile(szFilePath, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);

	if (!hFile)
		return FALSE;
	
	FILETIME ftm, ftLocal, ftCreate, ftLastAcc, ftLastWrite;

	bool bRes = (GetFileTime(hFile, &ftCreate, &ftLastAcc, &ftLastWrite) == TRUE);

	if (bRes)
		bRes = (TRUE == DosDateTimeToFileTime((WORD)(dwDosDate >> 16), (WORD)dwDosDate, &ftLocal));

	if (bRes)
		bRes = (TRUE == LocalFileTimeToFileTime(&ftLocal, &ftm));

	if (bRes)
		bRes = (TRUE == SetFileTime(hFile, &ftm, &ftLastAcc, &ftm));

	CloseHandle(hFile);

	return bRes;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精品午夜久久久| 成人欧美一区二区三区白人 | 欧美日韩美女一区二区| 日本不卡不码高清免费观看| 中文字幕欧美激情一区| 欧美精品一级二级| k8久久久一区二区三区| 爽爽淫人综合网网站 | 亚洲尤物在线视频观看| 日韩一二在线观看| 99免费精品在线观看| 免费人成精品欧美精品| 亚洲免费观看高清| 久久一区二区三区国产精品| 91 com成人网| 91老司机福利 在线| 国产毛片一区二区| 蜜臀av性久久久久蜜臀aⅴ| 亚洲人快播电影网| 亚洲国产成人在线| 欧美成人三级在线| 欧美疯狂性受xxxxx喷水图片| 成人精品一区二区三区四区| 久久99精品国产91久久来源| 亚洲成av人影院| 亚洲精品中文在线| 欧美国产精品久久| 国产欧美日韩视频在线观看| 欧美精品一区二| 欧美一区二区三区视频| 欧美三级中文字幕| 色综合视频在线观看| 不卡一二三区首页| 国产xxx精品视频大全| 久久黄色级2电影| 蜜臀av性久久久久蜜臀aⅴ | 国产伦理精品不卡| 日韩av中文在线观看| 天堂久久一区二区三区| 亚洲伊人伊色伊影伊综合网| 日韩毛片一二三区| ...av二区三区久久精品| 中文一区在线播放| 国产精品久久久久久久浪潮网站| 国产欧美一区二区三区沐欲| 国产亚洲1区2区3区| 久久久久久久久免费| 久久精品人人做人人综合| xfplay精品久久| 国产亚洲美州欧州综合国| 久久久九九九九| 久久久久国产精品麻豆| 欧美激情一区二区三区| 国产精品美女一区二区在线观看| 中文字幕亚洲区| 亚洲精品成人少妇| 亚洲超碰精品一区二区| 日韩精品三区四区| 久久99九九99精品| 国产精品1区2区| 北岛玲一区二区三区四区| 91最新地址在线播放| 91免费视频大全| 欧美日韩一区在线观看| 日韩一区二区电影| www亚洲一区| 国产精品系列在线| 一区二区成人在线视频| 日韩成人dvd| 国产精品亚洲成人| 91蜜桃免费观看视频| 欧美日韩你懂得| 亚洲精品一区二区三区99| 国产欧美日韩精品一区| 亚洲精品大片www| 美女在线视频一区| 国产成人午夜高潮毛片| 91久久奴性调教| 日韩欧美国产成人一区二区| 中文字幕在线一区二区三区| 亚洲一区二区不卡免费| 精品一区二区三区香蕉蜜桃| 波多野结衣中文字幕一区| 欧美婷婷六月丁香综合色| 欧美tk—视频vk| 亚洲视频在线一区观看| 免费高清视频精品| 成人av网站在线观看免费| 欧美欧美午夜aⅴ在线观看| 2024国产精品| 一区二区三区不卡在线观看| 激情深爱一区二区| 日本精品免费观看高清观看| 欧美va亚洲va在线观看蝴蝶网| 亚洲天天做日日做天天谢日日欢| 日韩av中文字幕一区二区| 99久久99久久久精品齐齐| 91精品国产免费| 久久精品国产99国产| 99vv1com这只有精品| 欧美一二区视频| 国产日韩精品一区二区三区| 亚洲制服丝袜av| 丰满少妇在线播放bd日韩电影| 91精品国产麻豆国产自产在线 | 91精品国产综合久久香蕉的特点| 国产精品污网站| 免费观看在线综合| 欧美色图天堂网| 久久久久久黄色| 亚洲第一在线综合网站| www.色精品| 精品国产亚洲在线| 亚洲国产精品一区二区久久| 成人动漫一区二区三区| 2014亚洲片线观看视频免费| 国产日韩欧美麻豆| 欧美特级限制片免费在线观看| 久久精品综合网| 日韩高清电影一区| 在线日韩一区二区| 中文字幕不卡在线观看| 国精品**一区二区三区在线蜜桃| 欧美日韩高清在线| 一区二区三区欧美亚洲| 成+人+亚洲+综合天堂| 欧美一区二区在线不卡| 亚洲国产精品久久人人爱蜜臀| 成人精品一区二区三区四区| 国产日韩精品视频一区| 国内精品国产成人| 日韩一区二区三区精品视频| 丝袜诱惑亚洲看片| 欧美日韩久久久一区| 亚洲精品国产第一综合99久久 | 国产三级精品在线| 久久国产精品第一页| 日韩欧美一级特黄在线播放| 五月天亚洲婷婷| 欧美日韩视频不卡| 亚洲bt欧美bt精品777| 亚洲精品你懂的| 色综合咪咪久久| 一区二区三区精品| 欧美日韩激情在线| 午夜成人免费视频| 欧美一级生活片| 久久精品国产第一区二区三区 | 亚洲欧美电影一区二区| 91色视频在线| 亚洲午夜电影在线观看| 91 com成人网| 国产综合成人久久大片91| 久久久久免费观看| www.亚洲色图| 伊人婷婷欧美激情| 在线不卡中文字幕播放| 久久精品久久精品| 久久久国产精品不卡| 成人av网站大全| 亚洲一区二区黄色| 欧美videos大乳护士334| 国产经典欧美精品| 国产精品伦理在线| 欧美午夜精品久久久久久超碰 | 7777精品伊人久久久大香线蕉的 | 欧美日韩一区中文字幕| 人人精品人人爱| 久久精品水蜜桃av综合天堂| 97成人超碰视| 视频精品一区二区| 久久久久国产精品人| 色一情一乱一乱一91av| 日本午夜一区二区| 日本一区二区三区四区| 欧美亚洲国产一区二区三区| 麻豆视频一区二区| 日韩视频免费观看高清完整版 | 成人av网站在线| 99久久久精品| 青青草一区二区三区| 久久精品视频免费观看| 91免费版在线| 六月丁香综合在线视频| 亚洲欧美中日韩| 777亚洲妇女| av电影天堂一区二区在线观看| 日韩精品视频网站| 国产精品久久一卡二卡| 欧美日韩一本到| 亚洲国产精品综合小说图片区| 日韩女优av电影在线观看| 成人av资源在线| 日韩电影网1区2区| 国产精品久久久久三级| 欧美欧美午夜aⅴ在线观看| 成人av免费在线观看| 麻豆国产一区二区| 一区二区三区四区中文字幕| 国产日韩在线不卡|