You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 13:25:59