Ejemplo n.º 1
0
//---------------------------------------------------------------------------
// 函数:	LoadPack
// 功能:	打开一个压缩的INI文件
// 参数:	FileName	文件名
// 返回:	TRUE		成功
//			FALSE		失败
//---------------------------------------------------------------------------
BOOL KIniFile::LoadPack(LPCSTR FileName)
{
	KPakFile	File;
	PVOID		PackBuf;
	PVOID		DataBuf;

	TPackHead	Header;

	// check file name
	if (FileName[0] == 0)
		return FALSE;

	// close open file
	if (m_Header.pNextNode)
		Clear();

	// open the pack ini file
	if (!File.Open((char*)FileName))
		return FALSE;

	// read pack file header
	File.Read(&Header, sizeof(Header));

	// if not a pack file read directly
	if (Header.Id != 0x4b434150) // "PACK"
		return FALSE;

	// allocate buffer for pack data
	PackBuf = m_MemStack.Push(Header.PackLen);

	// allocate bufer for real data
	DataBuf = m_MemStack.Push(Header.DataLen + 2);

	// read pack data for file
	File.Read(PackBuf, Header.PackLen);

	// check data length

	// create ini link in memory
	CreateIniLink(DataBuf, Header.DataLen);

	return TRUE;
}
Ejemplo n.º 2
0
//---------------------------------------------------------------------------
// 功能:	加载一个INI文件
// 返回:	1 成功,  0	失败
//---------------------------------------------------------------------------
int QIniFileImpl::LoadData(IFile* pFile)
{
	assert(pFile);
	Clear();

	int				nResult = false;
	BYTE*			pBuffer = NULL;
	unsigned long	uSize = pFile->Size();

	pBuffer = new BYTE[uSize + 4];	//文件有可能要补0之类的,如果是文件原大小有可能会越界
	if (pBuffer)
	{
		if (pFile->Read(pBuffer, uSize) == uSize)
		{
			CreateIniLink(pBuffer, uSize);
			nResult = true;
		}
	}
	SAFE_DELETE_ARRAY(pBuffer);
	return nResult;
}
Ejemplo n.º 3
0
//---------------------------------------------------------------------------
// 函数:	Load
// 功能:	加载一个INI文件
// 参数:	FileName	文件名
// 返回:	TRUE		成功
//			FALSE		失败
//---------------------------------------------------------------------------
BOOL KIniFile::Load(LPCSTR FileName)
{
	KPakFile	File;
	DWORD		dwSize;
	PVOID		Buffer;
	TPackHead*	pHeader;

	// check file name
	if (FileName[0] == 0)
		return FALSE;

	if (m_Header.pNextNode)
		Clear();

	if (!File.Open((char*)FileName))
	{
		g_DebugLog("Can't open ini file : %s", FileName);
		return FALSE;
	}
#pragma message("KIniFile 当前不支持 KeyName 为中文! by Romandou")

	dwSize = File.Size();

	Buffer = m_MemStack.Push(dwSize + 4);

	File.Read(Buffer, dwSize);

	pHeader = (TPackHead*)Buffer;
	if (pHeader->Id == 0x4b434150) // "PACK"
	{
		File.Close();
		return LoadPack(FileName);
	}

	CreateIniLink(Buffer, dwSize);

	return TRUE;
}