15.ue5的文件管理,C++实现

  原视频地址:

【虚幻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>();
}

在关卡模版中进行调用,运行测试

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值