原视频地址:
【虚幻5】UE5C++零基础全网全流程开发从入门到进阶教程合集(持续跟新中)_哔哩哔哩_bilibili
目录
文件的读取和写入
创建蓝图库函数BlueprintFunctionLibrary的类
在头文件中声明读写的方法
UFUNCTION(BlueprintCallable, Category = "File")
static bool LoadStringFromFile(FString FilePath,FString resultString);
UFUNCTION(BlueprintCallable, Category = "File")
static bool WriteStringToFile(TArray<FString> SaveFile, FString FilePath);
对我们上面声明的方法的进行实现
bool UMyBlueprintFunctionLibrary::LoadStringFromFile(FString FilePath, FString resultString)
{
if (!FilePath.IsEmpty()) {
//下面的方法,会将FilePath路径指定的文件,以字符串的形式读取到resultString中
if (FFileHelper::LoadFileToString(resultString, *FilePath)) {
//输出我们读取到的文件中的内容
GEngine->AddOnScreenDebugMessage(-1, 5.0, FColor::Red, FString::Printf(TEXT("LoadStringFromFile success : %s!"), *resultString));
return true;
}
else {
GEngine->AddOnScreenDebugMessage(-1,5.0,FColor::Red,TEXT("LoadStringFromFile error!"));
}
}
return false;
}
bool UMyBlueprintFunctionLibrary::WriteStringToFile(TArray<FString> SaveFile, FString FilePath)
{
if (!FilePath.IsEmpty()) {
//保存TArray中所有的String到FilePath指定的文件中
if (FFileHelper::SaveStringArrayToFile(SaveFile, *FilePath)) {
return true;
}
else {
GEngine->AddOnScreenDebugMessage(-1,5.0,FColor::Red, TEXT("LoadStringFromFile error!"));
}
}
return false;
}
对我们上面的代码进行测试,记住C++代码编写完后一定要编译
打开关卡蓝图
实现测试的蓝图事件
进入游戏中,按1键进行测试,读取文件成功,写文件成功
获取文件路径,后缀名,文件名
函数的声明
UFUNCTION(BlueprintCallable, Category = "File")
static bool GetFilePath(FString FilePath);
UFUNCTION(BlueprintCallable, Category = "File")
static bool GetFileName(FString FilePath,bool bRemovePath);
UFUNCTION(BlueprintCallable, Category = "File")
static bool GetFileExtension(FString InPath, bool bInCludeDot);
函数的实现
bool UMyBlueprintFunctionLibrary::GetFilePath(FString FilePath)
{
FString path = FPaths::GetPath(FilePath);
GEngine->AddOnScreenDebugMessage(-1, 5.0, FColor::Red, FString::Printf(TEXT("GetFilePath success : %s!"), *path));
return false;
}
bool UMyBlueprintFunctionLibrary::GetFileName(FString FilePath, bool bRemovePath)
{
FString FileName = FPaths::GetBaseFilename(FilePath, bRemovePath);
GEngine->AddOnScreenDebugMessage(-1, 5.0, FColor::Red, FString::Printf(TEXT("GetFilePath success : %s!"), *FileName));
return false;
}
bool UMyBlueprintFunctionLibrary::GetFileExtension(FString InPath, bool bInCludeDot)
{
FString FileExtension = FPaths::GetExtension(InPath, bInCludeDot);
GEngine->AddOnScreenDebugMessage(-1, 5.0, FColor::Red, FString::Printf(TEXT("GetFilePath success : %s!"), *FileExtension));
return false;
}
编译C++代码之后,进行测试
创建文件夹,删除文件夹
添加头文件
#include "Runtime/Core/Public/HAL/FileManagerGeneric.h"
//在编程和软件开发的上下文中,HAL 通常代表“硬件抽象层”(Hardware Abstraction Layer)。
//FileManagerGeneric.h 文件名暗示了这个头文件可能定义了一个通用的文件管理器类。
声明创建文件,删除文件的函数,并实现。
//函数声明
// 声明一个蓝图可调用函数,用于创建文件夹,归类在"File"类别下
UFUNCTION(BlueprintCallable, Category = "File")
static bool CreateFolder(FString FolderName);
// 声明另一个蓝图可调用函数,用于删除文件夹,同样归类在"File"类别下
UFUNCTION(BlueprintCallable, Category = "File")
static bool DeleteFolder(FString FolderName);
// 实现创建文件夹的函数
bool UMyBlueprintFunctionLibrary::CreateFolder(FString FolderName)
{
// 获取项目的根内容目录路径(以相对路径的方式)
FString ProjectPath = FPaths::ProjectContentDir();
// 拼接出想要创建的文件夹的完整路径
// 注意:这里使用了FString的运算符重载特性来拼接路径
FString FolderPath = ProjectPath / *FolderName;
// 使用平台文件管理器来创建文件夹及其所有父文件夹
FPlatformFileManager::Get().GetPlatformFile().CreateDirectoryTree(*FolderPath);
return false;
}
// 实现删除文件夹的函数
bool UMyBlueprintFunctionLibrary::DeleteFolder(FString FolderName)
{
// 获取项目的根内容目录路径
FString ProjectPath = FPaths::ProjectContentDir();
// 拼接出想要删除的文件夹的完整路径
FString FolderPath = ProjectPath / *FolderName;
// 使用平台文件管理器来递归地删除文件夹及其所有内容
FPlatformFileManager::Get().GetPlatformFile().DeleteDirectoryRecursively(*FolderPath);
}
在关卡蓝图中进行创建文件,删除文件的测试。
文件的移动和查找
添加头文件
#include "Runtime/Core/Public/HAL/FileManagerGeneric.h"
文件移动函数的声明和实现
UFUNCTION(BlueprintCallable, Category = "File")
static bool MoveFileTo(FString target, FString source);
UFUNCTION(BlueprintCallable, Category = "File")
static TArray<FString> FindFileFolder(FString Path, FString Filter,bool IsFiles,bool IsDir);
bool UMyBlueprintFunctionLibrary::MoveFileTo(FString target, FString source)
{
//IFileManager是UE内置类,并没有在FileManagerGeneric.h文件中
IFileManager::Get().Move(*target,*source);
return false;
}
TArray<FString> UMyBlueprintFunctionLibrary::FindFileFolder(FString Path, FString Filter, bool IsFiles, bool IsDir)
{
TArray<FString> FilePathList;
FFileManagerGeneric::Get().FindFilesRecursive(FilePathList,*Path, *Filter, IsFiles, IsDir);
//c++17的机制,直接迭代出容器中的元素进行访问
for (auto &path : FilePathList) {
GEngine->AddOnScreenDebugMessage(-1, 5.0, FColor::Red, FString::Printf(TEXT("FindFileFolder success : %s!"), *path));
}
return TArray<FString>();
}
在关卡模版中进行调用,运行测试