一直在研究虛幻的插件,期間碰到許多諸如文件操作,路徑操作等問題,總結記錄一下。
環境: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