当我们把一些自定义的ini文件放在类似content下的目录时,在对它进行读取的时候,会跳转到
获取String的位置,如下
bool FConfigCacheIni::GetString( const TCHAR* Section, const TCHAR* Key, FString& Value, const FString& Filename )
{FRemoteConfig::Get()->FinishRead(*Filename); // Ensure the remote file has been loaded and processedFConfigFile* File = Find( Filename, 0 );if( !File ){return false;}............return true;
}
然后在FConfigFile* File = Find( Filename, 0 );的位置,会通过文件名获取ConfigFile的指针,如下
FConfigFile* FConfigCacheIni::Find( const FString& Filename, bool CreateIfNotFound )
{ // check for non-filenamesif(Filename.Len() == 0){return nullptr;}// Get file.FConfigFile* Result = TMap<FString,FConfigFile>::Find( Filename );// this is || filesize so we load up .int files if file IO is allowedif( !Result && !bAreFileOperationsDisabled && (CreateIfNotFound || DoesConfigFileExistWrapper(*Filename) ) ){Result = &Add( Filename, FConfigFile() );Result->Read( Filename );UE_LOG(LogConfig, Verbose, TEXT( "GConfig::Find has loaded file: %s" ), *Filename );}return Result;
}
问题就在if( !Result && !bAreFileOperationsDisabled && (CreateIfNotFound || DoesConfigFileExistWrapper(*Filename) ) )这一句上,其中bAreFileOperationsDisabled禁止文件操纵的这个变量必须为false,这时候才能进入该if语句,去对该文件的对象进行创建和引用,但是有些时候我们在保存配置文件时候,为了强制写入,会有如下操作:
SaveConfig(CPF_Config, *FileName);GConfig->EnableFileOperations();GConfig->Flush(false, FileName);GConfig->DisableFileOperations();
这里就完美的把文件操作禁止掉了。所有该位置应该修改为
SaveConfig(CPF_Config, *FileName);if (GConfig->AreFileOperationsDisabled()){//如果初始不允许文件操作,则先打开,保存后再关掉GConfig->EnableFileOperations();GConfig->Flush(false, FileName); //强行存储。GConfig->DisableFileOperations();}else{GConfig->Flush(false, FileName);}
然后在读取自定义的文件之前,先进行一些判定
bool bConfigOperationsDisabled = GConfig->AreFileOperationsDisabled();if (bConfigOperationsDisabled){GConfig->EnableFileOperations();}//文件读取操作......//文件读取操作结束if (bConfigOperationsDisabled){GConfig->DisableFileOperations();}
这样就完美的解决了在某些异常情况下,自定义ini文件无法读取的问题。
本文发布于:2024-01-28 03:03:06,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/17063821944310.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |