bool CFileUtil::readVariant(IFileObject* file, CVariant& value) { EVariantType type = VT_NONE; if ( !file->read(&type, sizeof(uint8)) ) return false; switch(type) { case VT_NONE: break; case VT_BOOLEAN: { bool readbool; if ( !file->read(&readbool, sizeof(bool)) ) return false; value.set(readbool); } break; case VT_UINT: { uint64 readuint; if ( !file->read(&readuint, sizeof(uint64)) ) return false; value.set(readuint); } break; case VT_INT: { int64 readint; if ( !file->read(&readint, sizeof(int64)) ) return false; value.set(readint); } break; case VT_DOUBLE: { double readdouble; if ( !file->read(&readdouble, sizeof(double)) ) return false; value.set(readdouble); } break; case VT_STRING: { CString readstr; if ( !CFileUtil::readString(file, readstr) ) return false; value.set(readstr); } break; default: return false; } return true; }