UE5文件操作
首先在虚幻引擎中创建UMyBlueprintFunctionLibrary类,可以在该类中写我们重复利用的功能,并且这些功能不依赖于特定的游戏对象,方便全局调用。
1.文件的读取和写入
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()){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.获取文件名、后缀名、文件名
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);
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.创建文件夹和删除文件夹
UFUNCTION(BlueprintCallable, Category = "File")static void CreateFolder(FString FolderName);UFUNCTION(BlueprintCallable, Category = "File")static void DeleteFolder(FString FolderName);
在cpp中引入FileManagerGeneric.h
#include "Runtime/Core/Public/HAL/FileManagerGeneric.h"
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.文件的移动和查找
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);
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文件部分:
// 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文件部分:
// 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;
}
相关文章:
UE5文件操作
首先在虚幻引擎中创建UMyBlueprintFunctionLibrary类,可以在该类中写我们重复利用的功能,并且这些功能不依赖于特定的游戏对象,方便全局调用。 1.文件的读取和写入 UFUNCTION(BlueprintCallable, Category "File")static bool lo…...
element plus 去掉select选择框的边框,并修改右侧图标
1.去掉选择框边框 ::v-deep .el-select__wrapper{ box-shadow: none; } ::v-deep .is-hovering{ box-shadow: none !important; }2.修改选择框右侧图标 新建CaretBottom.vue文件内容: <template><el-icon><CaretBottom /></el-icon> <…...
Ceph KernelFuse GetSet Quota
Kernel fuse set示例...
JVM学习-字节码指令集(二)
对象的创建与访问指令 创建指令 虽然类实例和数组都是对象,但Java虚拟机对类实例和数组的创建和操作使用了不同的字节码指令创建类实例指令:new 它接收一个操作数,指向常量池的索引,表示要创建的类型,执行完成后&am…...
解密网络流量监控:优化IT运维的利器
引言: 在当今数字化时代,网络流量监控是维护网络稳定与业务连续性的关键。作为一名资深网络工程师,我将分享一些关于网络流量监控的重要知识,并探讨如何在IT运维中运用这一工具优化网络性能,确保业务的顺畅进行。 1. 网…...
oracle 分区表常用语句(2)
给分区表增加分区 第一种不存在MAXVALUE(直接添加即可) ALTER TABLE T6 ADD PARTITION P5 VALUES LESS THAN(TO_DATE( 2018-08-01 00:00:00, SYYYY-MM-DD HH24:MI:SS, NLS_CALENDARGREGORIAN));第二种存在MAXVALUE alter table T6 split PARTITION P4 at(TO_DAT…...
Python函数式编程进阶:用函数实现设计模式
文章目录 函数式编程进阶:用函数实现设计模式案例实现:构建“策略”模式使用函数实现”策略“模式享元 选择最佳策略:简单的方式 globals关键字 函数式编程进阶:用函数实现设计模式 案例实现:构建“策略”模式 策略模…...
Ingress controller:Kubernetes 的瑞士军刀
原文作者:Brian Ehlert of F5 原文链接:Ingress controller:Kubernetes 的瑞士军刀 转载来源:NGINX 中文官网 NGINX 唯一中文官方社区 ,尽在 nginx.org.cn 许多人认为 Ingress controller(Ingress 控制器&…...
uniapp tabBar app页面滚动闪屏的问题
我在做app的时候,调试tabBar页面滚动时莫名其妙的闪屏,其他页面不闪屏,可能跟新建的项目样式有关。 修改方法如下。 在pages.json中 "tabBar": {"selectedColor": "#204AFF","color": "#ccc…...
【计算机毕业设计】388微信小程序足球赛事及队伍管理系统
🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板ÿ…...
监控易监测对象及指标之:华为FusionInsight Kafka服务全方位监控
监控易提供对华为FusionInsight Kafka服务的全方位监控功能。该功能可以帮助用户实时监测Kafka服务的各项性能指标,确保服务的稳定运行和高效性能。 具体功能点包括: 服务状态监测:监控易能够实时监测华为FusionInsight Kafka服务的运行状态…...
Python装饰器的应用
Python 中的装饰器是一种语法糖,可以在运行时,动态的给函数或类添加功能。装饰器本质上是一个函数,使用 函数名就是可实现绑定给函数的第二个功能 。它的作用就是在不修改被装饰对象源代码和调用方式的前提下为被装饰对象添加额外的功能。 …...
【数据结构与算法 | 基础篇】力扣232, 225
1. 力扣232 : 用栈实现队列 (1). 题 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty): 实现 MyQueue 类: void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移…...
内网(极空间)搭建gitlab跳板机转发端口及域名配置
背景说明 https://blog.csdn.net/GodDavide/article/details/139182475 上文说到: 我已经用docker搭好了gitlab-ce服务,但我是部署在自己的家庭nas-极空间z4pro里的,属于内网环境。 另外我有一台阿里云服务器,做跳板机。 我有一个阿里的域名…...
如何知道自己电脑的 Shell类型是什么?
在macOS中,你可以通过以下几种方法来确定当前正在使用的shell类型,并了解相关的配置文件: 1. 使用终端命令确定shell类型 打开终端应用程序(Terminal)。输入以下命令并按回车键:echo $SHELL。该命令会输出…...
Axios的使用简单说明
axios 请求方式和参数 axios 可以发送 ajax 请求,不同的方法可以发送不同的请求: axios.get:发送get请求 axios.post:发送post请求 axios.put:发送put请求 axios.delete:发送delete请求 无论哪种方法,第一…...
查找list集合中,持续时间>=ContinueTime的数据集合,保存在新的list中
在给定的包含时间戳的list中,查找连续continueNum次的且时间间隔为needDiff的集合。 eg:相邻两个数据的时间戳间隔为1分钟,且超过30分钟有数据 /**** param list 包含时间戳(10位)的list* param continueNum 至少持续…...
nginx 反向代理配置详解
Nginx 反向代理是一种常用的部署策略,用于将客户端请求转发到内部网络中的一个或多个服务器,这些服务器直接处理请求并返回响应给Nginx,再由Nginx转交给客户端。这种设置可以提高网站的可用性和安全性,同时也能实现负载均衡、缓存…...
微信小程序毕业设计-农场驿站平台系统项目开发实战(附源码+论文)
大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:微信小程序毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设计…...
CAN总线应用协议CANopen
作为一种真正开放的CAN总线高层协议,CANopen协议允许不同的CAN设备以标准化的方式进行通讯,这使得CAN 设备具有互操作性。随着CANopen协议的日益完善,它已经广泛应用于多个行业。本文将对CANopen协议的对象字典、通讯对象、网络管理等几个方面…...
龙虎榜——20250610
上证指数放量收阴线,个股多数下跌,盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型,指数短线有调整的需求,大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的:御银股份、雄帝科技 驱动…...
脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)
一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...
关于nvm与node.js
1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...
【网络安全产品大调研系列】2. 体验漏洞扫描
前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…...
Module Federation 和 Native Federation 的比较
前言 Module Federation 是 Webpack 5 引入的微前端架构方案,允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...
【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...
Angular微前端架构:Module Federation + ngx-build-plus (Webpack)
以下是一个完整的 Angular 微前端示例,其中使用的是 Module Federation 和 npx-build-plus 实现了主应用(Shell)与子应用(Remote)的集成。 🛠️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...
DingDing机器人群消息推送
文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人,点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置,详见说明文档 成功后,记录Webhook 2 API文档说明 点击设置说明 查看自…...
4. TypeScript 类型推断与类型组合
一、类型推断 (一) 什么是类型推断 TypeScript 的类型推断会根据变量、函数返回值、对象和数组的赋值和使用方式,自动确定它们的类型。 这一特性减少了显式类型注解的需要,在保持类型安全的同时简化了代码。通过分析上下文和初始值,TypeSc…...
