UE4檔案及路徑類庫使用總結
阿新 • • 發佈:2019-01-05
一直在研究虛幻的外掛,期間碰到許多諸如檔案操作,路徑操作等問題,總結記錄一下。
環境:UE4版本4.19.2+Win10+VS2017。
檔案操作類(一):IPlatformFile
//例項化IPlatformFile物件 IPlatformFile& fileManager = FPlatformFileManager::Get().GetPlatformFile(); //判斷檔案是否存在 fileManager.FileExists(const TCHAR* Filename); //刪除檔案,執行了刪除操作返回true,只讀檔案無法執行刪除 fileManager.DeleteFile(const TCHAR* Filename); //拷貝檔案,選擇引數為拷貝方式 fileManager.CopyFile(const TCHAR* To, const TCHAR* From, EPlatformFileRead ReadFlags = EPlatformFileRead::None, EPlatformFileWrite WriteFlags = EPlatformFileWrite::None); //遞迴建立一個資料夾 fileManager.CreateDirectoryTree(const TCHAR* Directory); //遞迴刪除一個資料夾,包括包含的檔案 fileManager.DeleteDirectoryRecursively(const TCHAR* Directory); //將目標資料夾包含子資料夾下所有的檔案以字串陣列的形式賦值給FoundFiles,可以附帶副檔名過濾, fileManager.FindFilesRecursively(TArray<FString>& FoundFiles, const TCHAR* Directory, const TCHAR* FileExtension);
詳見定義位置:Runtime/Core/Public/GenericPlatform/GenericPlatformFile.h
Runtime/Core/Public/HAL/PlatformFilemanager.h
檔案操作類(二):FFileHelper
其實是封裝好的執行緒安全的工具類,不過相對的功能不是很全,推薦讀寫檔案時使用,由於方法較少,這裡以寫入檔案及載入檔案舉慄:
//覆寫模式寫入檔案內容 FFileHelper::SaveStringToFile( const FString& Content, const TCHAR* Filename, EEncodingOptions EncodingOptions = EEncodingOptions::AutoDetect, IFileManager* FileManager = &IFileManager::Get(), uint32 WriteFlags = 0 );
其中,覆寫模式只需要提供前兩個引數就可以了,Content為寫入內容,而後三種在自定義模式時需要全部提供,例如:
//換行並以追加模式寫入檔案內容
FFileHelper::SaveStringToFile("\r\n"+Content, *Filename,
FFileHelper::EEncodingOptions::AutoDetect, &IFileManager::Get(), EFileWrite::FILEWRITE_Append);
其中,EEncodingOptions 為編碼格式的列舉型別,定義在 FileHelper.h 中,分別有以下五種:
- AutoDetect
- ForceAnsi
- ForceUnicode
- ForceUTF8
- ForceUTF8WithoutBOM
倒數第二個引數為獲取例項化的檔案操作物件,
EFileWirte為寫入模式的列舉型別,定義在 FileManager.h 中,分別有以下六種:
- FILEWRITE_None
- FILEWRITE_NoFail
- FILEWRITE_NoReplaceExisting
- FILEWRITE_EvenIfReadOnly
- FILEWRITE_Append
- FILEWRITE_AllowRead
需要注意的是,在C++中"\n"符號指游標移到下一行的當前位置,"\r"指游標移到行首,需結合使用。
//載入檔案內容為字串,賦值給引數Result,最後的可選引數是校驗標識,一般用不到
FFileHelper::LoadFileToString( FString& Result, const TCHAR* Filename, EHashOptions VerifyFlags = EHashOptions::None );
詳見定義位置:Runtime/Core/Public/Misc/FileHelper.h
路徑操作類:FPaths
FPaths::RootDir();//返回根目錄路徑
FPaths::ProjectDir();//返回專案所在資料夾路徑,注意:4.18版本為 GameDir();已經無法在新版中使用
FPaths::ProjectConfigDir();//返回專案配置資料夾路徑
FPaths::RemoveDuplicateSlashes(FString& InPath);//刪除InPath中重複的斜槓
FPaths::ConvertRelativePathToFull(const FString& InPath);//將相對路徑轉換為絕對路徑並返回
FPaths::ValidatePath(const FString& InPath, FText* OutReason = nullptr);//校驗路徑返回是否正確,可選引數用於替換路徑中的失效字元
//分割路徑,根據給定分隔符 ExtensionPart 將InPath 分割為兩部分,分別賦值給引數PathPart和FileNamePart,可以理解為左右兩部分
FPaths::Split( const FString& InPath, FString& PathPart, FString& FilenamePart, FString& ExtensionPart );
//將輸入的多個路徑拼接成一個路徑,可以拼接字串,類似FString中的字串拼接
FPaths::Combine(PathTypes&&... InPaths)
詳見定義位置:Paths.h