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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? zipper.cpp

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

#include "stdafx.h"
#include "Zipper.h"

#include "zlib\zip.h"
#include "zlib\iowin32.h"
#include "..\shared\filemisc.h"

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

const UINT BUFFERSIZE = 2048;

CZipper::CZipper(LPCTSTR szFilePath, LPCTSTR szRootFolder, bool bAppend) : m_uzFile(0)
{
	CloseZip();

	if (szFilePath)
		OpenZip(szFilePath, szRootFolder, bAppend);
}

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

bool CZipper::CloseZip()
{
	int nRet = m_uzFile ? zipClose(m_uzFile, NULL) : ZIP_OK;

	m_uzFile = NULL;
	m_szRootFolder[0] = 0;
	ZeroMemory(&m_info, sizeof(m_info));

	return (nRet == ZIP_OK);
}

void CZipper::GetFileInfo(Z_FileInfo& info)
{
	info = m_info;
}

// simple interface
bool CZipper::ZipFile(LPCTSTR szFilePath)
{
	// make zip path
	char szDrive[_MAX_DRIVE], szFolder[MAX_PATH], szName[_MAX_FNAME];
	_splitpath(szFilePath, szDrive, szFolder, szName, NULL);

	char szZipPath[MAX_PATH];
	_makepath(szZipPath, szDrive, szFolder, szName, "zip");

	CZipper zip;

	if (zip.OpenZip(szZipPath, false))
		return zip.AddFileToZip(szFilePath, false);

	return FALSE;
}
	
bool CZipper::ZipFolder(LPCTSTR szFilePath, bool bIgnoreFilePath)
{
	// make zip path
	char szDrive[_MAX_DRIVE], szFolder[MAX_PATH], szName[_MAX_FNAME];
	_splitpath(szFilePath, szDrive, szFolder, szName, NULL);

	char szZipPath[MAX_PATH];
	_makepath(szZipPath, szDrive, szFolder, szName, "zip");

	CZipper zip;

	if (zip.OpenZip(szZipPath, FALSE))
		return zip.AddFolderToZip(szFilePath, bIgnoreFilePath);

	return FALSE;
}
	
// works with prior opened zip
bool CZipper::AddFileToZip(LPCTSTR szFilePath, bool bIgnoreFilePath)
{
	if (!m_uzFile)
		return FALSE;

	// we don't allow paths beginning with '..\' because this would be outside
	// the root folder
	if (!bIgnoreFilePath && strstr(szFilePath, "..\\") == szFilePath)
		return false;

	TRACE ("CZipper::AddFileToZip(%s)\n", szFilePath);

	bool bFullPath = (strchr(szFilePath, ':') != NULL);

	// if the file is relative then we need to append the root before opening
	char szFullFilePath[MAX_PATH];
	
	lstrcpy(szFullFilePath, szFilePath);
	PrepareSourcePath(szFullFilePath);

	// if the file is a fullpath then remove the root path bit
	char szFileName[MAX_PATH] = "";

	if (bIgnoreFilePath)
	{
		char szName[_MAX_FNAME], szExt[_MAX_EXT];
		_splitpath(szFilePath, NULL, NULL, szName, szExt);

		_makepath(szFileName, NULL, NULL, szName, szExt);
	}
	else if (bFullPath)
	{
		// check the root can be found
		if (0 != _strnicmp(szFilePath, m_szRootFolder, lstrlen(m_szRootFolder)))
			return false;

		// else
		lstrcpy(szFileName, szFilePath + lstrlen(m_szRootFolder));
	}
	else // relative path
	{
		// if the path begins with '.\' then remove it
		if (strstr(szFilePath, ".\\") == szFilePath)
			lstrcpy(szFileName, szFilePath + 2);
		else
			lstrcpy(szFileName, szFilePath);
	}

	// save file attributes
	zip_fileinfo zfi;

	zfi.internal_fa = 0;
	zfi.external_fa = ::GetFileAttributes(szFilePath);
	
	// save file time
	SYSTEMTIME st;

	GetLastModified(szFullFilePath, st, TRUE);

	zfi.dosDate = 0;
	zfi.tmz_date.tm_year = st.wYear;
	zfi.tmz_date.tm_mon = st.wMonth - 1;
	zfi.tmz_date.tm_mday = st.wDay;
	zfi.tmz_date.tm_hour = st.wHour;
	zfi.tmz_date.tm_min = st.wMinute;
	zfi.tmz_date.tm_sec = st.wSecond;
	
	// load input file
	HANDLE hInputFile = ::CreateFile(szFullFilePath, 
									GENERIC_READ,
									0,
									NULL,
									OPEN_EXISTING,
									FILE_ATTRIBUTE_READONLY,
									NULL);

	if (hInputFile == INVALID_HANDLE_VALUE)
		return FALSE;

	int nRet = zipOpenNewFileInZip(m_uzFile, 
									szFileName,
									&zfi, 
									NULL, 
									0,
									NULL,
									0, 
									NULL,
									Z_DEFLATED,
									Z_DEFAULT_COMPRESSION);

	if (nRet == ZIP_OK)
	{
		m_info.nFileCount++;

		// read the file and output to zip
		char pBuffer[BUFFERSIZE];
		DWORD dwBytesRead = 0, dwFileSize = 0;

		while (nRet == ZIP_OK && ::ReadFile(hInputFile, pBuffer, BUFFERSIZE, &dwBytesRead, NULL))
		{
			dwFileSize += dwBytesRead;

			if (dwBytesRead)
				nRet = zipWriteInFileInZip(m_uzFile, pBuffer, dwBytesRead);
			else
				break;
		}

		m_info.dwUncompressedSize += dwFileSize;
	}

	zipCloseFileInZip(m_uzFile);
	::CloseHandle(hInputFile);

	return (nRet == ZIP_OK);
}

bool CZipper::AddFileToZip(LPCTSTR szFilePath, LPCTSTR szRelFolderPath)
{
	if (!m_uzFile)
		return FALSE;

	// szRelFolderPath cannot contain drive info
	if (szRelFolderPath && strchr(szRelFolderPath, ':'))
		return FALSE;

	// if the file is relative then we need to append the root before opening
	char szFullFilePath[MAX_PATH];
	
	lstrcpy(szFullFilePath, szFilePath);
	PrepareSourcePath(szFullFilePath);

	// save file attributes and time
	zip_fileinfo zfi;

	zfi.internal_fa = 0;
	zfi.external_fa = ::GetFileAttributes(szFilePath);
	
	// save file time
	SYSTEMTIME st;

	GetLastModified(szFullFilePath, st, TRUE);

	zfi.dosDate = 0;
	zfi.tmz_date.tm_year = st.wYear;
	zfi.tmz_date.tm_mon = st.wMonth - 1;
	zfi.tmz_date.tm_mday = st.wDay;
	zfi.tmz_date.tm_hour = st.wHour;
	zfi.tmz_date.tm_min = st.wMinute;
	zfi.tmz_date.tm_sec = st.wSecond;

	// load input file
	HANDLE hInputFile = ::CreateFile(szFullFilePath, 
									GENERIC_READ,
									0,
									NULL,
									OPEN_EXISTING,
									FILE_ATTRIBUTE_READONLY,
									NULL);

	if (hInputFile == INVALID_HANDLE_VALUE)
		return FALSE;

	// strip drive info off filepath
	char szName[_MAX_FNAME], szExt[_MAX_EXT];
	_splitpath(szFilePath, NULL, NULL, szName, szExt);

	// prepend new folder path 
	char szFileName[MAX_PATH];
	_makepath(szFileName, NULL, szRelFolderPath, szName, szExt);

	// open the file in the zip making sure we remove any leading '\'
	int nRet = zipOpenNewFileInZip(m_uzFile, 
									szFileName + (szFileName[0] == '\\' ? 1 : 0),
									&zfi, 
									NULL, 
									0,
									NULL,
									0, 
									NULL,
									Z_DEFLATED,
									Z_DEFAULT_COMPRESSION);

	if (nRet == ZIP_OK)
	{
		m_info.nFileCount++;

		// read the file and output to zip
		char pBuffer[BUFFERSIZE];
		DWORD dwBytesRead = 0, dwFileSize = 0;

		while (nRet == ZIP_OK && ::ReadFile(hInputFile, pBuffer, BUFFERSIZE, &dwBytesRead, NULL))
		{
			dwFileSize += dwBytesRead;

			if (dwBytesRead)
				nRet = zipWriteInFileInZip(m_uzFile, pBuffer, dwBytesRead);
			else
				break;
		}

		m_info.dwUncompressedSize += dwFileSize;
	}

	zipCloseFileInZip(m_uzFile);
	::CloseHandle(hInputFile);

	return (nRet == ZIP_OK);
}

bool CZipper::AddFolderToZip(LPCTSTR szFolderPath, bool bIgnoreFilePath)
{
	if (!m_uzFile)
		return FALSE;

	m_info.nFolderCount++;

	// if the path is relative then we need to append the root before opening
	char szFullPath[MAX_PATH];
	
	lstrcpy(szFullPath, szFolderPath);
	PrepareSourcePath(szFullPath);

	// always add folder first
	// save file attributes
	zip_fileinfo zfi;
	
	zfi.internal_fa = 0;
	zfi.external_fa = ::GetFileAttributes(szFullPath);
	
	SYSTEMTIME st;
	
	GetLastModified(szFullPath, st, TRUE);
	
	zfi.dosDate = 0;
	zfi.tmz_date.tm_year = st.wYear;
	zfi.tmz_date.tm_mon = st.wMonth - 1;
	zfi.tmz_date.tm_mday = st.wDay;
	zfi.tmz_date.tm_hour = st.wHour;
	zfi.tmz_date.tm_min = st.wMinute;
	zfi.tmz_date.tm_sec = st.wSecond;
	
	// if the folder is a fullpath then remove the root path bit
	char szFolderName[MAX_PATH] = "";
	
	if (bIgnoreFilePath)
	{
		_splitpath(szFullPath, NULL, NULL, szFolderName, NULL);
	}
	else
	{
		// check the root can be found
		if (0 != _strnicmp(szFullPath, m_szRootFolder, lstrlen(m_szRootFolder)))
			return false;
		
		// else
		lstrcpy(szFolderName, szFullPath + lstrlen(m_szRootFolder));
	}
	
	// folders are denoted by a trailing '\\'
	lstrcat(szFolderName, "\\");
	
	// open the file in the zip making sure we remove any leading '\'
	int nRet = zipOpenNewFileInZip(m_uzFile, 
		szFolderName,
		&zfi, 
		NULL, 
		0,
		NULL,
		0, 
		NULL,
		Z_DEFLATED,
		Z_DEFAULT_COMPRESSION);
	
	zipCloseFileInZip(m_uzFile);

	// build searchspec
	char szDrive[_MAX_DRIVE], szFolder[MAX_PATH], szName[_MAX_FNAME];
	_splitpath(szFullPath, szDrive, szFolder, szName, NULL);
	lstrcat(szFolder, szName);

	char szSearchSpec[MAX_PATH];
	_makepath(szSearchSpec, szDrive, szFolder, "*", "*");

	WIN32_FIND_DATA finfo;
	HANDLE hSearch = FindFirstFile(szSearchSpec, &finfo);

	if (hSearch != INVALID_HANDLE_VALUE) 
	{
		do 
		{
			if (finfo.cFileName[0] != '.') 
			{
				char szItem[MAX_PATH];
				_makepath(szItem, szDrive, szFolder, finfo.cFileName, NULL);
				
				if (finfo.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
				{
					AddFolderToZip(szItem, bIgnoreFilePath);
				}
				else 
					AddFileToZip(szItem, bIgnoreFilePath);
			}
		} 
		while (FindNextFile(hSearch, &finfo));
		
		FindClose(hSearch);
	}

	return TRUE;
}

// extended interface
bool CZipper::OpenZip(LPCTSTR szFilePath, LPCTSTR szRootFolder, bool bAppend)
{
	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;

	// zipOpen will fail if bAppend is TRUE and zip does not exist
	if (bAppend && ::GetFileAttributes(szFullPath) == 0xffffffff)
		bAppend = false;

	m_uzFile = zipOpen(szFullPath, bAppend ? 1 : 0);

	if (m_uzFile)
	{
		if (!szRootFolder)
		{
			char szDrive[_MAX_DRIVE], szFolder[MAX_PATH];
			_splitpath(szFullPath, szDrive, szFolder, NULL, NULL);

			_makepath(m_szRootFolder, szDrive, szFolder, NULL, NULL);
		}
		else if (lstrlen(szRootFolder))
		{
			_makepath(m_szRootFolder, NULL, szRootFolder, "", NULL);
		}
	}

	return (m_uzFile != NULL);
}

void CZipper::PrepareSourcePath(LPTSTR szPath)
{
	bool bFullPath = (strchr(szPath, ':') != NULL);

	// if the file is relative then we need to append the root before opening
	if (!bFullPath)
	{
		char szTemp[MAX_PATH];
		lstrcpy(szTemp, szPath);

		_makepath(szPath, NULL, m_szRootFolder, szTemp, NULL);
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产性色一区二区| 成人永久aaa| 欧美日韩一区二区在线观看| 亚洲国产综合色| 欧美日韩国产三级| 蜜臀av性久久久久av蜜臀妖精| 欧美精品三级在线观看| 美女被吸乳得到大胸91| 久久综合色综合88| 不卡一区二区三区四区| 亚洲免费资源在线播放| 欧美日韩亚洲综合一区二区三区| 天天综合色天天| wwwwxxxxx欧美| 成人丝袜高跟foot| 伊人一区二区三区| 欧美成人伊人久久综合网| 国产一区二区三区黄视频 | 在线亚洲欧美专区二区| 午夜影院在线观看欧美| 26uuu久久天堂性欧美| 99在线精品观看| 天天综合日日夜夜精品| 久久精品水蜜桃av综合天堂| 一本大道av一区二区在线播放| 午夜a成v人精品| 亚洲国产精品二十页| 欧美三级电影一区| 国产高清无密码一区二区三区| 亚洲日本在线天堂| 欧美大片在线观看一区二区| 9人人澡人人爽人人精品| 婷婷久久综合九色国产成人| 国产婷婷色一区二区三区四区| 91福利国产精品| 国产一区二区三区最好精华液| 亚洲免费在线观看| 精品福利二区三区| 欧美日韩中文国产| 北条麻妃国产九九精品视频| 欧美aaaaa成人免费观看视频| 国产精品久久久久久久久久久免费看 | 色综合久久综合网| 国产一区二区免费视频| 亚洲午夜精品在线| 国产精品午夜免费| 欧美一级一级性生活免费录像| 99久久精品免费看国产| 国产在线精品一区二区三区不卡 | 亚洲一区二区av电影| 欧美国产精品一区二区| 日韩美一区二区三区| 欧美性欧美巨大黑白大战| 丁香一区二区三区| 久久精品国产亚洲5555| 亚洲亚洲人成综合网络| 中文字幕一区二区三区在线观看| 精品美女一区二区三区| 欧美精品欧美精品系列| 色琪琪一区二区三区亚洲区| 成人一级片网址| 国产一区二区不卡老阿姨| 日韩电影在线一区二区| 亚洲国产精品综合小说图片区| 亚洲欧美怡红院| 国产精品少妇自拍| 国产拍揄自揄精品视频麻豆| 精品国产伦一区二区三区观看方式 | 亚洲人一二三区| 中文字幕在线观看不卡| 久久精品水蜜桃av综合天堂| 精品国产99国产精品| 欧美不卡在线视频| 日韩免费看的电影| 日韩三级视频中文字幕| 日韩三级高清在线| 欧美一级片在线观看| 91精品欧美一区二区三区综合在| 欧美日韩国产综合视频在线观看| 色久综合一二码| 欧美制服丝袜第一页| 欧洲另类一二三四区| 欧美亚洲丝袜传媒另类| 欧美怡红院视频| 欧美日韩国产三级| 欧美一区二区黄色| 精品国产凹凸成av人网站| www国产精品av| 亚洲国产成人私人影院tom| 中文久久乱码一区二区| 中文字幕亚洲一区二区av在线 | 在线观看视频欧美| 欧美色涩在线第一页| 欧美精品一二三四| 欧美成人在线直播| 国产三级精品视频| 最新不卡av在线| 亚洲大片精品永久免费| 蜜桃视频一区二区三区| 国产资源在线一区| 成人毛片视频在线观看| 色综合久久九月婷婷色综合| 在线观看日产精品| 欧美一区二区三区日韩| 久久―日本道色综合久久| 国产精品久久99| 亚洲国产视频一区二区| 美国十次综合导航| 成人免费av资源| 欧美日韩免费一区二区三区视频| 日韩欧美在线影院| 国产精品福利影院| 国产欧美精品在线观看| 午夜不卡av免费| 老鸭窝一区二区久久精品| 国产成人av影院| 一本大道综合伊人精品热热| 欧美少妇一区二区| 精品va天堂亚洲国产| 中文字幕制服丝袜成人av| 日本午夜精品一区二区三区电影| 国产成人午夜精品影院观看视频 | 亚洲国产精品久久人人爱蜜臀| 亚洲第一搞黄网站| 国产成人精品免费在线| 欧美久久一二区| 国产精品福利影院| 麻豆国产精品777777在线| 91免费精品国自产拍在线不卡| 日韩情涩欧美日韩视频| 亚洲激情图片一区| 国产盗摄一区二区三区| 欧美一级高清大全免费观看| 亚洲欧美另类久久久精品2019| 裸体在线国模精品偷拍| 欧美探花视频资源| 国产精品沙发午睡系列990531| 美女视频黄免费的久久| 在线免费观看日韩欧美| 中文字幕乱码久久午夜不卡| 日韩专区在线视频| 日本韩国欧美国产| 国产精品网站导航| 精品夜夜嗨av一区二区三区| 欧美探花视频资源| 日韩伦理免费电影| 成人听书哪个软件好| 久久亚区不卡日本| 麻豆成人在线观看| 欧美精品久久99久久在免费线| 自拍偷拍国产亚洲| 成人天堂资源www在线| 久久一区二区视频| 精品影视av免费| 欧美一区二区三区四区高清| 午夜精品久久久久| 欧美日韩一区二区三区视频| 尤物视频一区二区| 成人av中文字幕| 中文字幕不卡一区| 成人免费毛片片v| 中文字幕va一区二区三区| 国产一区二区三区av电影| 精品国产一区二区精华| 免费成人你懂的| 欧美一卡在线观看| 看电视剧不卡顿的网站| 欧美一区欧美二区| 美女国产一区二区三区| 日韩精品一区二区三区视频在线观看 | 精品制服美女丁香| 欧美xfplay| 黑人精品欧美一区二区蜜桃 | 欧美性猛交xxxxxxxx| 一区二区三区成人在线视频| 在线观看国产91| 午夜电影一区二区| 欧美一区二区福利在线| 激情欧美一区二区| 欧美激情中文字幕一区二区| 粉嫩嫩av羞羞动漫久久久| 成人欧美一区二区三区黑人麻豆| 欧美日韩国产美| 视频一区视频二区在线观看| 欧美一区二区精品| 韩国一区二区三区| 中文字幕永久在线不卡| 日本久久精品电影| 亚洲午夜视频在线观看| 日韩视频在线一区二区| 国产一区二区按摩在线观看| 国产精品婷婷午夜在线观看| 一本大道久久a久久精品综合| 亚洲第一二三四区| 精品国产乱码久久久久久蜜臀| 国产成人综合亚洲91猫咪| 亚洲欧美激情小说另类| 3d动漫精品啪啪1区2区免费| 国产精品亚洲第一区在线暖暖韩国 | 香蕉成人伊视频在线观看|