首先在虚幻引擎中创建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;
}