コード例 #1
0
ファイル: QQIpInfo.cpp プロジェクト: NanYoMy/KadCrawler
bool CIpInfo::LoadInfoFile(const char* lpszFilePathName)
{
	bool bReturn = false;

	ifstream hSrcFile(lpszFilePathName,ios_base::binary);
	if(hSrcFile.is_open()&& !hSrcFile.fail())
	{
        hSrcFile.seekg(0,ios::end);
		unsigned long dwNumberOfBytesToRead = hSrcFile.tellg();//Get file size
        hSrcFile.seekg(0,ios::beg);
		m_pDataBuffer = new unsigned char[dwNumberOfBytesToRead + 1];//would not be failed in win32?
        memset(m_pDataBuffer,0,dwNumberOfBytesToRead+1);
		if(m_pDataBuffer != NULL)
		{
			hSrcFile.read((char*)m_pDataBuffer,dwNumberOfBytesToRead);
            unsigned long readBytes = hSrcFile.gcount();
            if(readBytes > 0)
			{
				//calculate the ip information record count
				unsigned long *pIntData = (unsigned long *)m_pDataBuffer;
				unsigned long nBuffer_0 = *pIntData;//Start position of record infor in file
				unsigned long nBuffer_4	= *(pIntData + 1);//End position of record infor in file
                first_index_pos = *pIntData;
                last_index_pos= *(pIntData+1);

				nBuffer_4 -= nBuffer_0;
				
				m_dwRecordCount = nBuffer_4 / 7;//IP record count
				int nsuiv = nBuffer_4 % 7;
				if(nsuiv == 0)//must be integral info struct,7 bytes
				{
					m_bInit = true;
					bReturn = m_bInit;
				}
			}
			if(hSrcFile.fail())
			{
				DEBUG_PRINT1("Error Opening File\n");
			}
            if(hSrcFile.bad())
			{
				DEBUG_PRINT1("Error reading File\n");
			}
            while(readBytes < dwNumberOfBytesToRead && hSrcFile.eof())
            {
                hSrcFile.read((char*)(m_pDataBuffer+readBytes),dwNumberOfBytesToRead-readBytes);
                unsigned long cur_read = hSrcFile.gcount();
                readBytes += cur_read;
            }
		}
		hSrcFile.close();//close IP data file
	}
	if(!m_bInit)
			FreeBuffer();//Verify the null buffer if we got some error

	return bReturn;
}