1. 程式人生 > >UE4檔案及路徑類庫使用總結

UE4檔案及路徑類庫使用總結

一直在研究虛幻的外掛,期間碰到許多諸如檔案操作,路徑操作等問題,總結記錄一下。

環境: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