基于Unreal Engine的iOS应用更新后启动时如何删除冗余CameraImages文件夹?
解决方案:在UE 5.1.1 iOS应用启动时自动清理CameraImages文件夹
实现步骤
1. 创建自定义GameInstance
在项目中新建继承自UGameInstance的类,用于在应用启动阶段执行清理逻辑。
2. 编写清理函数
根据需求选择以下两种实现方式:
方式一:每次启动都清理
适用于需要持续清理的场景:
#include "MyGameInstance.h" #include "Misc/Paths.h" #include "PlatformFilemanager.h" #include "IPlatformFile.h" void UMyGameInstance::Init() { Super::Init(); CleanupCameraImagesFolder(); } void UMyGameInstance::CleanupCameraImagesFolder() { IPlatformFile& PlatformFile = FPlatformFileManager::Get().GetPlatformFile(); FString CameraImagesDir = FPaths::Combine(FPaths::GetDocumentsDirectory(), TEXT("CameraImages")); if (PlatformFile.DirectoryExists(*CameraImagesDir)) { // 递归删除文件夹及内部所有内容 PlatformFile.DeleteDirectoryRecursively(*CameraImagesDir); // 重新创建空文件夹(如果后续功能需要保留该目录结构) PlatformFile.CreateDirectory(*CameraImagesDir); } }
方式二:仅第一次启动新版本时清理
避免重复操作,提升效率:
#include "MyGameInstance.h" #include "Misc/Paths.h" #include "PlatformFilemanager.h" #include "IPlatformFile.h" #include "Misc/ConfigCacheIni.h" void UMyGameInstance::Init() { Super::Init(); CleanupCameraImagesFolder(); } void UMyGameInstance::CleanupCameraImagesFolder() { bool bHasCleaned = false; GConfig->GetBool(TEXT("/Script/Engine.GameUserSettings"), TEXT("bHasCleanedCameraImages"), bHasCleaned, GGameUserSettingsIni); if (!bHasCleaned) { IPlatformFile& PlatformFile = FPlatformFileManager::Get().GetPlatformFile(); FString CameraImagesDir = FPaths::Combine(FPaths::GetDocumentsDirectory(), TEXT("CameraImages")); if (PlatformFile.DirectoryExists(*CameraImagesDir)) { PlatformFile.DeleteDirectoryRecursively(*CameraImagesDir); PlatformFile.CreateDirectory(*CameraImagesDir); } // 标记清理完成,写入配置文件避免重复执行 GConfig->SetBool(TEXT("/Script/Engine.GameUserSettings"), TEXT("bHasCleanedCameraImages"), true, GGameUserSettingsIni); GConfig->Flush(false, GGameUserSettingsIni); } }
3. 设置自定义GameInstance
- 打开
Edit > Project Settings - 导航到
Maps & Modes - 在
Game Instance Class下拉菜单中选择你创建的UMyGameInstance
4. 测试验证
- 在iOS设备上安装新版本应用,启动后检查
Container/Documents/CameraImages目录下的旧文件是否被删除 - 若使用方式二,再次启动应用时不会重复执行删除操作
关键说明
- UE的
FPaths::GetDocumentsDirectory()直接对应iOS应用的Container/Documents目录,无需额外路径转换 - 应用对自身Documents目录拥有完整读写权限,无需向用户申请额外权限
DeleteDirectoryRecursively会彻底删除目标文件夹及其中所有内容,确保冗余数据被清理
内容的提问来源于stack exchange,提问作者d0g
相关产品推荐
相关产品推荐

