//------------------------------------------------------------------------ bool CFileReadSLK::LoadFromFile( const char* pFileName ) //------------------------------------------------------------------------ { assert( NULL == m_data ); assert( NULL == m_column ); //OutputDebugString(pFileName); //OutputDebugString("\n==================================\n"); IFileReader* fileReader = NULL; if( !CreateFileReader( &fileReader ) ) return false; bool isLoadOk = true; for( unsigned int i = 0; i < _TSLKValueArray.size(); i++ ) { _TSLKValue* p = _TSLKValueArray[i]; SAFE_DELETE( p ); } _TSLKValueArray.clear(); char* buffer = NULL; uInt32 bufferSize = 0; if(fileReader) { if( !(fileReader->OpenFile( pFileName )) ) { isLoadOk = false; goto OPEN_FILE_FAIL; } bufferSize = fileReader->GetSize(); assert( bufferSize > 0 ); buffer = new char[bufferSize+1]; memset( buffer, 0, (bufferSize + 1) * sizeof(char) ); char tmpBuffer[1024]; memset( tmpBuffer, 0, 1024 * sizeof(char) ); char* ptrBuffer = buffer; size_t size = fileReader->Read( (void*)tmpBuffer, 1024 ); assert( "出现异常错误!" && size <= 1024 ); size_t count = 0; while( size > 0 ) { memcpy( ptrBuffer, tmpBuffer, size ); ptrBuffer += size; count += size; memset( tmpBuffer, 0, 1024 * sizeof(char) ); size = fileReader->Read( tmpBuffer, 1024 ); assert( "出现异常错误!" && size <= 1024 ); } assert( "文件大小错误!" && bufferSize == count ); if( bufferSize != count ) isLoadOk = false; else if( !GetInfoFromMemory( buffer, bufferSize ) ) isLoadOk = false; SAFE_DELETE_ARRAY( buffer ); } OPEN_FILE_FAIL: if(fileReader) fileReader->Close(); SAFE_DELETE( fileReader ); for( unsigned int i = 0; i < _TSLKValueArray.size(); i++ ) { _TSLKValue* p = _TSLKValueArray[i]; SAFE_DELETE( p ); } _TSLKValueArray.clear(); return isLoadOk; }