UE5文件操作

首先在虚幻引擎中创建UMyBlueprintFunctionLibrary类,可以在该类中写我们重复利用的功能,并且这些功能不依赖于特定的游戏对象,方便全局调用。

1.文件的读取和写入

cpp 复制代码
	UFUNCTION(BlueprintCallable, Category = "File")
	static bool loadStringFromFile(FString filePath, FString& resultString);
	UFUNCTION(BlueprintCallable, Category = "File")
	static bool writeStringToFile(TArray<FString> saveFile, FString filePath);
cpp 复制代码
bool UMyBlueprintFunctionLibrary::loadStringFromFile(FString filePath, FString& resultString)
{
	if (!filePath.IsEmpty())
	{
		if (FFileHelper::LoadFileToString(resultString, *filePath))
		{
			return true;
		}
		else
		{
			//error
		}
	}
	return false;
}

bool UMyBlueprintFunctionLibrary::writeStringToFile(TArray<FString> saveFile, FString filePath)
{
	if (!filePath.IsEmpty())
	{
		if (FFileHelper::SaveStringArrayToFile(saveFile, *filePath))
		{
			return true;
		}
		else
		{
			//error
		}
	}
	return false;
}

2.获取文件名、后缀名、文件名

cpp 复制代码
	UFUNCTION(BlueprintCallable, Category = "File")
	static FString GetFilePath(FString path);
	UFUNCTION(BlueprintCallable, Category = "File")
	static FString GetFileName(FString InPath,bool bRemovePath);
	UFUNCTION(BlueprintCallable, Category = "File")
	static FString GetFileExtension(FString InPath, bool bInCludeDot);
cpp 复制代码
FString UMyBlueprintFunctionLibrary::GetFilePath(FString path)
{
	FString result;
	result = FPaths::GetPath(*path);
	return result;
}

FString UMyBlueprintFunctionLibrary::GetFileName(FString InPath, bool bRemovePath)
{
	return FPaths::GetBaseFilename(*InPath,bRemovePath);
}

FString UMyBlueprintFunctionLibrary::GetFileExtension(FString InPath, bool bInCludeDot)
{
	return FPaths::GetExtension(*InPath,bInCludeDot);
}

3.创建文件夹和删除文件夹

cpp 复制代码
	UFUNCTION(BlueprintCallable, Category = "File")
	static void CreateFolder(FString FolderName);
	UFUNCTION(BlueprintCallable, Category = "File")
	static void DeleteFolder(FString FolderName);

在cpp中引入FileManagerGeneric.h

cpp 复制代码
#include "Runtime/Core/Public/HAL/FileManagerGeneric.h"
cpp 复制代码
void UMyBlueprintFunctionLibrary::CreateFolder(FString FolderName)
{
	//FString path = FPaths::ProjectContentDir();
	FPlatformFileManager::Get().GetPlatformFile().CreateDirectoryTree(*FolderName);
}

void UMyBlueprintFunctionLibrary::DeleteFolder(FString FolderName)
{
	//FString path = FPaths::ProjectContentDir();
	FPlatformFileManager::Get().GetPlatformFile().DeleteDirectoryRecursively(*FolderName);
}

4.文件的移动和查找

cpp 复制代码
	UFUNCTION(BlueprintCallable, Category = "File")
	static bool MoveFileTo(FString To, FString From);
	UFUNCTION(BlueprintCallable, Category = "File")
	static TArray<FString> FindFileFolder(FString Path, FString Filter, bool Files, bool Directory);
cpp 复制代码
bool UMyBlueprintFunctionLibrary::MoveFileTo(FString To, FString From)
{
	return IFileManager::Get().Move(*To,*From);
}

TArray<FString> UMyBlueprintFunctionLibrary::FindFileFolder(FString Path, FString Filter, bool Files, bool Directory)
{
	TArray<FString> FilePathList;
	FilePathList.Empty();
	FFileManagerGeneric::Get().FindFilesRecursive(FilePathList, *Path, *Filter, Files, Directory);
	return FilePathList;
}

5.全部代码

h文件部分:

cpp 复制代码
// Fill out your copyright notice in the Description page of Project Settings.

#pragma once

#include "CoreMinimal.h"
#include "Kismet/BlueprintFunctionLibrary.h"
#include "MyBlueprintFunctionLibrary.generated.h"

/**
 * 
 */
UCLASS()
class STUDYCODEPROJECT_API UMyBlueprintFunctionLibrary : public UBlueprintFunctionLibrary
{
	GENERATED_BODY()
public:
	UFUNCTION(BlueprintCallable, Category = "File")
	static bool loadStringFromFile(FString filePath, FString& resultString);
	UFUNCTION(BlueprintCallable, Category = "File")
	static bool writeStringToFile(TArray<FString> saveFile, FString filePath);
	UFUNCTION(BlueprintCallable, Category = "File")
	static FString GetFilePath(FString path);
	UFUNCTION(BlueprintCallable, Category = "File")
	static FString GetFileName(FString InPath,bool bRemovePath);
	UFUNCTION(BlueprintCallable, Category = "File")
	static FString GetFileExtension(FString InPath, bool bInCludeDot);
	UFUNCTION(BlueprintCallable, Category = "File")
	static void CreateFolder(FString FolderName);
	UFUNCTION(BlueprintCallable, Category = "File")
	static void DeleteFolder(FString FolderName);
	UFUNCTION(BlueprintCallable, Category = "File")
	static bool MoveFileTo(FString To, FString From);
	UFUNCTION(BlueprintCallable, Category = "File")
	static TArray<FString> FindFileFolder(FString Path, FString Filter, bool Files, bool Directory);
};

cpp文件部分:

cpp 复制代码
// Fill out your copyright notice in the Description page of Project Settings.


#include "MyBlueprintFunctionLibrary.h"
#include "Runtime/Core/Public/HAL/FileManagerGeneric.h"

bool UMyBlueprintFunctionLibrary::loadStringFromFile(FString filePath, FString& resultString)
{
	if (!filePath.IsEmpty())
	{
		if (FFileHelper::LoadFileToString(resultString, *filePath))
		{
			return true;
		}
		else
		{
			//error
		}
	}
	return false;
}

bool UMyBlueprintFunctionLibrary::writeStringToFile(TArray<FString> saveFile, FString filePath)
{
	if (!filePath.IsEmpty())
	{
		if (FFileHelper::SaveStringArrayToFile(saveFile, *filePath))
		{
			return true;
		}
		else
		{
			//error
		}
	}
	return false;
}

FString UMyBlueprintFunctionLibrary::GetFilePath(FString path)
{
	FString result;
	result = FPaths::GetPath(*path);
	return result;
}

FString UMyBlueprintFunctionLibrary::GetFileName(FString InPath, bool bRemovePath)
{
	return FPaths::GetBaseFilename(*InPath,bRemovePath);
}

FString UMyBlueprintFunctionLibrary::GetFileExtension(FString InPath, bool bInCludeDot)
{
	return FPaths::GetExtension(*InPath,bInCludeDot);
}

void UMyBlueprintFunctionLibrary::CreateFolder(FString FolderName)
{
	//FString path = FPaths::ProjectContentDir();
	FPlatformFileManager::Get().GetPlatformFile().CreateDirectoryTree(*FolderName);
}

void UMyBlueprintFunctionLibrary::DeleteFolder(FString FolderName)
{
	//FString path = FPaths::ProjectContentDir();
	FPlatformFileManager::Get().GetPlatformFile().DeleteDirectoryRecursively(*FolderName);
}

bool UMyBlueprintFunctionLibrary::MoveFileTo(FString To, FString From)
{
	return IFileManager::Get().Move(*To,*From);
}

TArray<FString> UMyBlueprintFunctionLibrary::FindFileFolder(FString Path, FString Filter, bool Files, bool Directory)
{
	TArray<FString> FilePathList;
	FilePathList.Empty();
	FFileManagerGeneric::Get().FindFilesRecursive(FilePathList, *Path, *Filter, Files, Directory);
	return FilePathList;
}
相关推荐
2501_941111991 小时前
C++中的装饰器模式变体
开发语言·c++·算法
怕什么真理无穷1 小时前
C++_面试15_零拷贝
c++·面试·职场和发展
AA陈超1 小时前
ASC学习笔记0007:用于与GameplayAbilities系统交互的核心ActorComponent
c++·笔记·学习·ue5·虚幻引擎
大袁同学1 小时前
【哈希hash】:程序的“魔法索引”,实现数据瞬移
数据结构·c++·算法·哈希算法·散列表
沐怡旸2 小时前
【穿越Effective C++】条款21:必须返回对象时,别妄想返回其reference——对象返回的语义与效率平衡
c++·面试
全栈陈序员2 小时前
用Rust和Bevy打造2D平台游戏原型
开发语言·rust·游戏引擎·游戏程序
2501_941112612 小时前
C++与Docker集成开发
开发语言·c++·算法
智者知已应修善业2 小时前
【51单片机:两边向中间流水:即两边先点亮然后熄灭,次边的点亮再熄灭,直到最中间的两个点亮再熄灭,然后重复动作。】2023-3-4
c语言·c++·经验分享·笔记·嵌入式硬件·算法·51单片机
@卞3 小时前
ST 表相关练习题
数据结构·c++·算法
报错小能手3 小时前
C++笔记 bind函数模板
开发语言·c++·笔记