移动端相对到绝对路径转换

IOS 相对到绝对路径转换

在接入的一些库中,需要传递文件的绝对路径,可以通过下面的方式进行转换:

1
IFileManager::Get().ConvertToAbsolutePathForExternalAppForRead(*InRelatePath);; 

它是定义在 IFileManager 接口中的一个虚函数,应该在各个平台的 PlatformFile 中均有自己的实现,但是在 Android 中依然是相对路径的,不知道 UE 是不是忘了实现了。

IOS:Runtime/Core/Public/IOS/IOSPlatformFile.h

Android 上相对路径转换成绝对路径的方式在之前的笔记中有写。

Android 相对路径转绝对路径

有些需求需要把 FPaths::ProjectDir() 等路径转换为移动设备上的绝对路径,可以参考 Core/Private/Android/AndroidPlatformFile.cpp#L126 中的实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// Constructs the base path for any files which are not in OBB/pak data
const FString &GetFileBasePath()
{
static FString BasePath = GFilePathBase + FString(FILEBASE_DIRECTORY) + FApp::GetProjectName() + FString("/");
return BasePath;
}


FString AndroidRelativeToAbsolutePath(bool bUseInternalBasePath, FString RelPath)
{
if (RelPath.StartsWith(TEXT("../"), ESearchCase::CaseSensitive))
{

do {
RelPath.RightChopInline(3, false);
} while (RelPath.StartsWith(TEXT("../"), ESearchCase::CaseSensitive));

return (bUseInternalBasePath ? GInternalFilePath : GetFileBasePath()) / RelPath;
}
return RelPath;
}