39 lines
1.1 KiB
Plaintext
Vendored
39 lines
1.1 KiB
Plaintext
Vendored
#if DL_PLATFORM == DL_PLATFORM_ANDROID
|
|
if(str[0] != '/')
|
|
{// 不是绝对路径,则读assets
|
|
AAsset* asset = AAssetManager_open(
|
|
g_android->_app->activity->assetManager,
|
|
str.data(), AASSET_MODE_BUFFER);
|
|
if (!asset)
|
|
{
|
|
log_err("AAssetManager_open失败:{}", str);
|
|
return {};
|
|
}
|
|
|
|
Buffer buf;
|
|
auto size = AAsset_getLength(asset);
|
|
buf.resize(size);
|
|
|
|
int size_read = AAsset_read(asset, buf.data(), size);
|
|
AAsset_close(asset);
|
|
|
|
if (size_read < size)
|
|
{
|
|
log_err("AAsset_read失败:{}", str);
|
|
return {};
|
|
}
|
|
|
|
// 保存到外部存储
|
|
std::string str_temp = PathStorage() + str;
|
|
File::CreateFolder(File::GetFilePath(str_temp));
|
|
std::ofstream ofs;
|
|
ofs.open(str_temp);
|
|
ofs.write((char*)buf.data(), buf.size());
|
|
ofs.close();
|
|
|
|
log_info("安卓从assets创建文件:{} -> {}", path_name, str_temp);
|
|
std::ifstream ret;
|
|
ret.open(str_temp, is_binary ? (std::ifstream::binary | std::ifstream::in) : std::ifstream::in);
|
|
return ret;
|
|
}
|
|
#endif |