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

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

?? ziparchive.cpp

?? 這是一個用VC++編寫的靜態(tài)庫
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
		{
			m_storage.m_pFile->Seek(uStartOffset + TotalWritten, CFile::begin);
			m_storage.m_pFile->Write(buf, size_read);
		}
		TotalWritten += size_read;
	}
	while (size_read == BytesToCopy);
	if (uTotalToWrite != TotalWritten)
		ThrowError(CZipException::generic);
	DWORD uRemoved = (uEndOffset - uStartOffset);
	m_storage.m_pFile->SetLength(m_storage.m_pFile->GetLength() - uRemoved);
	return uRemoved;
}


void CZipArchive::DeleteInternal(WORD uIndex)
{
	CZipFileHeader* pfh = m_centralDir.m_headers[uIndex];
	DWORD uOtherOffsetChanged = 0;
	
	if (uIndex == GetNoEntries() - 1) // last entry or the only one entry
		m_storage.m_pFile->SetLength(pfh->m_uOffset + m_centralDir.m_uBytesBeforeZip);						
	else
		uOtherOffsetChanged = RemovePackedFile(pfh->m_uOffset, m_centralDir.m_headers[uIndex + 1]->m_uOffset);
	
	
	m_centralDir.RemoveFile(uIndex);
	
	// teraz uaktualnij offsety w pozosta硑ch pozycjach central dir 
	// (update offsets in file headers in the central dir)
	if (uOtherOffsetChanged)
		for (int i = uIndex; i < GetNoEntries(); i++)
			m_centralDir.m_headers[i]->m_uOffset -= uOtherOffsetChanged;
}

bool CZipArchive::IsDriveRemovable(LPCTSTR lpszFilePath)
{
	return GetDriveType(GetDrive(lpszFilePath)) == DRIVE_REMOVABLE;
}

CString CZipArchive::GetDrive(LPCTSTR lpszFilePath)
{
	TCHAR szDrive[_MAX_DRIVE];
	_tsplitpath(lpszFilePath, szDrive, NULL, NULL, NULL);
	return szDrive;
}

bool CZipArchive::AddNewFile(LPCTSTR lpszFilePath,  
							 int iLevel,          
                             bool bFullPath,      
                             ZIPCALLBACKFUN pCallback,
                             void* pUserData,         
                             unsigned long nBufSize)
{
	if (!nBufSize)
		return false;
	
	CZipFileHeader header;
	header.SetFileName(bFullPath ? GetFileDirAndName(lpszFilePath) : GetFileName(lpszFilePath));
	if (header.GetFileNameSize() == 0)
		return false;
	if (!OpenNewFile(header, iLevel, lpszFilePath))
		return false;
	
	if (!IsDirectory(header.m_uExternalAttr))
	{
		CFile f;
		CFileException* e = new CFileException;
		BOOL bRet = f.Open(lpszFilePath, CFile::modeRead | CFile::shareDenyWrite, e);
		e->Delete();
		if (!bRet)
			return false;
		
		DWORD iRead, iFileLength = pCallback ? f.GetLength() : 0, iSoFar = 0;
		CZipAutoBuffer buf(nBufSize);
		do
		{
			iRead = f.Read(buf, nBufSize);
			if (iRead)
			{
				WriteNewFile(buf, iRead);
				iSoFar += iRead;
				if (pCallback)
					if (!pCallback(iFileLength, iSoFar, pUserData))
						break;
			}
		}
		while (iRead == buf.GetSize());
	}
	CloseNewFile();
	return true;
}

int CZipArchive::GetSpanMode()
{
	return m_storage.m_iSpanMode * m_storage.IsSpanMode();
}

CString CZipArchive::GetArchivePath()
{
	return m_storage.m_pFile->GetFilePath();
}

CString CZipArchive::GetGlobalComment()
{
	if (IsClosed())
	{
		TRACE(_T("ZipArchive is closed.\n"));
		return _T("");
	}
	CString temp;	
	if (SingleToWide(m_centralDir.m_pszComment, temp) != -1)
		return temp;
	else 
		return _T("");
}

bool CZipArchive::SetGlobalComment(const CString &szComment)
{
	if (IsClosed())
	{
		TRACE(_T("ZipArchive is closed.\n"));
		return false;
	}
	if (m_storage.IsSpanMode() == -1)
	{
		TRACE(_T("You cannot modify the global comment of the existing disk spanning archive.\n"));
		return false;
	}

	WideToSingle(szComment, m_centralDir.m_pszComment);
	m_centralDir.RemoveFromDisk();
	return true;
}

bool CZipArchive::IsDirectory(DWORD uAttr)
{
	return (uAttr & FILE_ATTRIBUTE_DIRECTORY) != 0;
}

int CZipArchive::GetCurrentDisk()
{
	return m_storage.GetCurrentDisk() + 1;
}

bool CZipArchive::SetFileComment(WORD uIndex, CString szComment)
{
	if (IsClosed())
	{
		TRACE(_T("ZipArchive is closed.\n"));
		return false;
	}
	if (m_storage.IsSpanMode() == -1)
	{
		TRACE(_T("You cannot modify the file comment in the existing disk spanning archive.\n"));
		return false;
	}
	
	if (!m_centralDir.IsValidIndex(uIndex))
		return false;
	m_centralDir.m_headers[uIndex]->SetComment(szComment);
	m_centralDir.RemoveFromDisk();
	return true;
}

int CZipArchive::CompareWords(const void *pArg1, const void *pArg2)
{
	WORD w1 = *(WORD*)pArg1;
	WORD w2 = *(WORD*)pArg2;
	return w1 == w2 ? 0 :(w1 < w2 ? - 1 : 1);
}

void CZipArchive::CryptInitKeys()
{
	ASSERT(m_pszPassword.GetSize());
	m_keys[0] = 305419896L;
	m_keys[1] = 591751049L;
	m_keys[2] = 878082192L;
	for (DWORD i = 0; i < m_pszPassword.GetSize(); i++)
		CryptUpdateKeys(m_pszPassword[i]);
}

void CZipArchive::CryptUpdateKeys(char c)
{
	
	m_keys[0] = CryptCRC32(m_keys[0], c);
	m_keys[1] += m_keys[0] & 0xff;
	m_keys[1] = m_keys[1] * 134775813L + 1;
	c = char(m_keys[1] >> 24);
	m_keys[2] = CryptCRC32(m_keys[2], c);
}

bool CZipArchive::CryptCheck()
{
	CZipAutoBuffer buf(ENCR_HEADER_LEN);
	m_storage.Read(buf, ENCR_HEADER_LEN, false);
	BYTE b = 0;
	for (int i = 0; i < ENCR_HEADER_LEN; i++)
	{
		b = buf[i]; // only temporary
		CryptDecode((char&)b);
	}
	// check the last byte
	if (CurrentFile()->IsDataDescr()) // Data descriptor present
		return BYTE(CurrentFile()->m_uModTime >> 8) == b;
	else
		return BYTE(CurrentFile()->m_uCrc32 >> 24) == b;
}

char CZipArchive::CryptDecryptByte()
{
	int temp = (m_keys[2] & 0xffff) | 2;
	return (char)(((temp * (temp ^ 1)) >> 8) & 0xff);
}

void CZipArchive::CryptDecode(char &c)
{
	c ^= CryptDecryptByte();
	CryptUpdateKeys(c);
}

bool CZipArchive::SetPassword(LPCTSTR lpszPassword)
{
	if (m_iFileOpened != nothing)
	{
		TRACE(_T("You cannot change the password when the file is opened\n"));
		return false; // it's important not to change the password when the file inside archive is opened
	}
	if (IsClosed())
	{
		TRACE(_T("Setting the password for a closed archive has no effect.\n"));
	}
	if (lpszPassword)
	{
		int iLen = WideToSingle(lpszPassword, m_pszPassword);
		if (iLen == -1)
			return false;
		for (size_t i = 0; (int)i < iLen; i++)
			if (m_pszPassword[i] > 127)
			{
				m_pszPassword.Release();
				TRACE(_T("The password contains forbidden characters. Password cleared.\n"));
				return false;
			}
	}
	else
		m_pszPassword.Release();
	return true;
}

DWORD CZipArchive::CryptCRC32(DWORD l, char c)
{
	const DWORD *CRC_TABLE = get_crc_table();
	return CRC_TABLE[(l ^ c) & 0xff] ^ (l >> 8);
}

void CZipArchive::CryptCryptHeader(long iCrc, CZipAutoBuffer &buf)
{
	CryptInitKeys();
	srand(UINT(GetTickCount()*time(NULL)));
	// genereate pseudo-random sequence
	char c;
	for (int i = 0; i < ENCR_HEADER_LEN - 2; i++)
	{
		int t1 = rand();
		c = (char)(t1 >> 6);
		if (!c)
			c = (char)t1;
		CryptEncode(c);
		buf[i] = c;

	}
	c = (char)((iCrc >> 16) & 0xff);
	CryptEncode(c);
	buf[ENCR_HEADER_LEN - 2] = c;
	c = (char)((iCrc >> 24) & 0xff);
	CryptEncode(c);
	buf[ENCR_HEADER_LEN - 1] = c;
}

void CZipArchive::CryptEncode(char &c)
{
	char t = CryptDecryptByte();
	CryptUpdateKeys(c);
	c ^= t;
}

void CZipArchive::CryptEncodeBuffer()
{
	if (CurrentFile()->IsEncrypted())
		for (DWORD i = 0; i < m_info.m_uComprLeft; i++)
			CryptEncode(m_info.m_pBuffer[i]);
}

void CZipArchive::CloseFileAfterTestFailed()
{
	if (m_iFileOpened != extract)
	{
		TRACE(_T("No file opened.\n"));
		return;
	}
	m_info.m_pBuffer.Release();
	m_centralDir.Clear(false);
	m_iFileOpened = nothing;
}

bool CZipArchive::TestFile(WORD uIndex, ZIPCALLBACKFUN pCallback, void* pUserData, DWORD uBufSize)
{
	if (!uBufSize)
		return false;
	CZipFileHeader* pHeader = m_centralDir.m_headers[uIndex];
	if (IsFileDirectory(uIndex))
	{
		
			// we do not test whether the password for the encrypted directory
		// is correct, since it seems to be senseless (anyway password 
		// encrypted directories should be avoided - it adds 12 bytes)
		DWORD iSize = pHeader->m_uComprSize;
		if ((iSize != 0 || iSize != pHeader->m_uUncomprSize)
			// different treating compressed directories
			&& !(pHeader->IsEncrypted() && iSize == 12 && !pHeader->m_uUncomprSize))
			ThrowError(CZipException::dirWithSize);
		return true;
	}
	else
	{
		try
		{
			if (!OpenFile(uIndex))
				return false;
			CZipAutoBuffer buf(uBufSize);
			DWORD iRead, iSoFar = 0;
			do
			{	
				iRead = ReadFile(buf, buf.GetSize());
				iSoFar += iRead;
				if (pCallback)
					if (!pCallback(pHeader->m_uUncomprSize, iSoFar, pUserData))
						break;
			}
			while (iRead == buf.GetSize());
			CloseFile();
		}
		catch(CException*)
		{
			CloseFileAfterTestFailed();
			throw;
		}
	}
	return true;

}

int CZipArchive::WideToSingle(LPCTSTR lpWide, CZipAutoBuffer &szSingle)
{
	size_t wideLen = _tcslen(lpWide);
	if (wideLen == 0)
	{
		szSingle.Release();
		return 0;
	}

#ifdef _UNICODE	
	// iLen does not include terminating character
	int iLen = WideCharToMultiByte(CP_ACP,0, lpWide, wideLen, szSingle, 
		0, NULL, NULL);
	if (iLen > 0)
	{
		szSingle.Allocate(iLen, true);
		iLen = WideCharToMultiByte(CP_ACP,0, lpWide , wideLen, szSingle, 
			iLen, NULL, NULL);
		ASSERT(iLen != 0);
	}
	else // here it means error
	{
		szSingle.Release();
		iLen --;
	}
	return iLen;
		
#else // if not UNICODE just copy
	// 	iLen does not include the NULL character
	szSingle.Allocate(wideLen);
	memcpy(szSingle, lpWide, wideLen);
	return wideLen;
#endif

}

int CZipArchive::SingleToWide(CZipAutoBuffer &szSingle, CString& szWide)
{
	int singleLen = szSingle.GetSize();
#ifdef _UNICODE	
	// iLen doesn't include terminating character
	int iLen = MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, szSingle, singleLen, NULL, 0);
	if (iLen > 0)
	{
		iLen = MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, szSingle, singleLen, 
			szWide.GetBuffer(iLen) , iLen);
		szWide.ReleaseBuffer(iLen);
		ASSERT(iLen != 0);
	}
	else
	{
		szWide.Empty();
		iLen --;
	}
	return iLen;

#else // if not UNICODE just copy
	// 	iLen does not include the NULL character
	memcpy(szWide.GetBuffer(singleLen), szSingle, singleLen);
	szWide.ReleaseBuffer(singleLen);
	return singleLen;
#endif
}

const DWORD* CZipArchive::GetCRCTable()
{
	return get_crc_table();
}

void CZipArchive::CryptDecodeBuffer(DWORD uCount)
{
	if (CurrentFile()->IsEncrypted())
		for (DWORD i = 0; i < uCount; i++)
			CryptDecode(m_info.m_pBuffer[i]);
}

void CZipArchive::EmptyPtrList()
{
	if (m_list.GetCount())
	{
		// if some memory hasn't been freed due to an error in zlib, so free it now
		POSITION pos = m_list.GetHeadPosition();
		while (pos)
			delete[] m_list.GetNext(pos);
	}

}



void CZipArchive::EnableFindFast(bool bEnable)
{
	if (IsClosed())
	{
		TRACE(_T("Set it after opening the archive"));
		return;
	}

	if (m_centralDir.m_bFindFastEnabled == bEnable)
		return;
	m_centralDir.m_bFindFastEnabled = bEnable;
	if (bEnable)
		m_centralDir.BuildFindFastArray();
	else
		m_centralDir.m_findarray.RemoveAll();
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
麻豆国产精品一区二区三区 | 国产精品久久久久久久久动漫| 欧美唯美清纯偷拍| 在线一区二区视频| 精品免费一区二区三区| 国产视频一区二区在线| 欧美一区中文字幕| 国产jizzjizz一区二区| 99久久精品免费精品国产| 成人一二三区视频| 91高清视频免费看| 日韩免费视频一区| 中文字幕的久久| 偷拍亚洲欧洲综合| 久久精品国产网站| 91豆麻精品91久久久久久| 久久众筹精品私拍模特| 性做久久久久久| 色噜噜狠狠一区二区三区果冻| 日韩精品中文字幕在线不卡尤物| 亚洲天堂久久久久久久| 国产iv一区二区三区| 国产色一区二区| 久久99在线观看| 日韩欧美国产不卡| 久久激情五月婷婷| 91精品在线一区二区| 亚洲欧洲成人自拍| 国产日韩欧美亚洲| 国产精品综合一区二区| 亚洲免费成人av| 久久电影网电视剧免费观看| 国产成人啪免费观看软件| 91精品国产一区二区三区蜜臀 | 欧美精品丝袜久久久中文字幕| 中文字幕制服丝袜一区二区三区| 欧美性色aⅴ视频一区日韩精品| 亚洲人成亚洲人成在线观看图片 | 色网站国产精品| 亚洲激情中文1区| 91蜜桃在线观看| 亚洲一区在线观看视频| 色婷婷精品大在线视频| 日本女人一区二区三区| 久久精品夜色噜噜亚洲aⅴ| 五月激情综合婷婷| 精品国产91洋老外米糕| 91在线观看高清| 亚洲电影第三页| 爽爽淫人综合网网站| 欧美少妇bbb| 久久这里都是精品| 国产精品免费视频网站| 午夜久久久影院| 国精产品一区一区三区mba桃花 | 亚洲日本韩国一区| 奇米777欧美一区二区| 懂色av一区二区三区免费观看| 精品亚洲aⅴ乱码一区二区三区| 色婷婷精品久久二区二区蜜臀av | 日本不卡中文字幕| 男男视频亚洲欧美| 亚洲精品免费在线| 国产寡妇亲子伦一区二区| 亚洲精品日日夜夜| 不卡av在线网| 一区二区国产盗摄色噜噜| 日韩精品中文字幕一区二区三区| 成人黄色大片在线观看| 日本电影欧美片| 91亚洲精品一区二区乱码| 99精品国产热久久91蜜凸| 91福利视频久久久久| 91视视频在线观看入口直接观看www | 国产精品亚洲一区二区三区妖精 | 久久久久国产精品麻豆ai换脸| 91麻豆精品秘密| 成人性生交大片免费看中文| av日韩在线网站| 国产精品一区二区男女羞羞无遮挡 | 国产亚洲午夜高清国产拍精品| 一区二区三区精品在线| 国产在线不卡一区| 欧美色视频在线| 亚洲国产精品久久人人爱| 99视频在线精品| 亚洲欧美在线观看| 成人一级视频在线观看| 亚洲视频一区二区在线观看| 国产夫妻精品视频| 国产日韩精品一区| 国产另类ts人妖一区二区| 欧美日韩一区二区欧美激情| 日韩国产精品久久久| 欧美日韩一区视频| 亚洲国产精品欧美一二99| 狠狠色综合播放一区二区| 欧美一区二区成人6969| 亚洲美女少妇撒尿| 欧美午夜免费电影| 一区二区日韩av| 日韩精品一区二区三区在线观看 | 日韩一级片网站| 国产精品久久久久久久裸模 | 精品国产一区二区三区久久影院| 亚洲一区二区精品久久av| av资源网一区| 成人免费一区二区三区视频| 日韩欧美国产三级| 91久久精品一区二区三| 日韩精彩视频在线观看| 精品国产伦一区二区三区观看体验| 精品一区精品二区高清| 一区二区三区高清| 欧美电影在线免费观看| 国产欧美一区二区在线| 亚洲一区在线免费观看| 91精品欧美福利在线观看| 国产精品国产精品国产专区不蜜| 久久99精品一区二区三区| 欧美日韩成人综合| 一区二区三区国产豹纹内裤在线| 狠狠色狠狠色综合| 欧美美女黄视频| 免费三级欧美电影| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 一区二区中文视频| 亚洲欧洲精品成人久久奇米网| 亚洲成a人片在线不卡一二三区| 亚洲精品一区二区在线观看| 波多野结衣在线aⅴ中文字幕不卡| 波波电影院一区二区三区| 国产乱人伦精品一区二区在线观看 | 精品不卡在线视频| 久久久精品综合| 精品一二三四在线| 《视频一区视频二区| 欧美一区二区女人| 欧美久久久久免费| 一区二区三区四区高清精品免费观看| 欧美激情一区二区| 国产精品天天摸av网| 中文字幕中文字幕一区| 亚洲一区二区精品3399| 一级日本不卡的影视| 一区二区激情小说| 天堂资源在线中文精品| 人妖欧美一区二区| 成人久久视频在线观看| 色综合激情久久| 欧美一卡在线观看| 6080yy午夜一二三区久久| 91在线视频播放| 国内精品久久久久影院薰衣草| 自拍偷自拍亚洲精品播放| 欧美精品一区二区三区在线播放 | 91精品国产黑色紧身裤美女| 国产精品白丝jk黑袜喷水| 国产宾馆实践打屁股91| 日韩国产欧美一区二区三区| 伊人一区二区三区| 精品国产免费一区二区三区四区| 国产成人午夜精品5599 | 欧美高清视频www夜色资源网| 男女激情视频一区| 亚洲高清免费观看高清完整版在线观看| 久久久久国色av免费看影院| 亚洲人精品一区| 依依成人综合视频| 六月丁香婷婷色狠狠久久| 亚洲一区二区中文在线| 99久久免费精品高清特色大片| 欧美视频在线一区二区三区| www.66久久| 欧美一级免费大片| 欧美一区二区三区性视频| 久久午夜电影网| 丝袜亚洲另类欧美| 精品黑人一区二区三区久久| 亚洲国产一区二区a毛片| 国产精品123| 亚洲精品日韩专区silk| 成人av高清在线| 欧美在线你懂得| 91麻豆高清视频| www.欧美精品一二区| 国产一区二区三区黄视频| 99久久er热在这里只有精品15| 91精品国产91久久久久久一区二区| 欧美一级欧美一级在线播放| 欧美国产精品一区二区三区| 婷婷久久综合九色国产成人| 国产成人aaa| 久久在线观看免费| 欧美久久久久久久久| 国产精品 日产精品 欧美精品| 亚洲乱码一区二区三区在线观看| 欧美日韩高清在线播放| 国产精品综合在线视频| 国产精品久久久久久久久晋中|