You need to enable JavaScript to run this app. 使用Rad Studio(C++Builder)实现跨端SaveToFile,安卓端找不到保存文件求解
优惠活动
大模型
产品
解决方案
定价
更多

使用Rad Studio(C++Builder)实现跨端SaveToFile,安卓端找不到保存文件求解

安卓端C++ Builder FMX 调用SaveToFile保存文件可见方案

核心原因

你iOS端用的System::Ioutils::TPath::GetDocumentsPath()在安卓系统返回的是应用专属私有目录,默认只有当前应用可以访问,系统文件管理器、其他应用都无法查看,应用卸载后文件会同步删除,所以你会找不到保存的文件。

前置配置

  • 打开项目配置:Project -> Options -> Application -> Uses Permissions,开启以下权限:
    • READ_EXTERNAL_STORAGE
    • WRITE_EXTERNAL_STORAGE
    • 若目标SDK版本≥30(安卓11及以上),额外开启MANAGE_EXTERNAL_STORAGE权限
  • 安卓10(SDK 29)适配:在AndroidManifest.xml的application节点中添加属性:android:requestLegacyExternalStorage="true",绕过分区存储限制

代码实现示例

1. 保存到应用私有目录(仅应用自身可见)

如果不需要外部访问,直接沿用原有逻辑即可,示例代码:

#include <System.IOUtils.hpp>

// 生成私有目录下的文件路径
String filePath = TPath::Combine(TPath::GetDocumentsPath(), "test_save.txt");
// 示例:TStringList保存文本内容
TStringList *content = new TStringList();
content->Add("测试保存内容");
content->SaveToFile(filePath, TEncoding::UTF8);
delete content;

2. 保存到公共可见目录(系统文件管理器可查)

如果需要文件对外可见,要调用TPath::GetPublicPath()获取系统公共目录路径:

#include <System.IOUtils.hpp>

// 获取系统公共文档目录路径,第二个参数可以根据需求替换为图片、下载等其他公共目录
String publicDocPath = TPath::GetPublicPath(System::Ioutils::TPublicPath::Documents);
// 拼接完整保存路径,建议单独创建应用专属子文件夹避免和其他文件混淆
String savePath = TPath::Combine(publicDocPath, "你的应用名称/测试保存文件.txt");
// 提前创建目标文件夹,避免路径不存在导致保存失败
if(!TDirectory::Exists(TPath::GetDirectoryName(savePath))){
    TDirectory::CreateDirectory(TPath::GetDirectoryName(savePath));
}
// 调用SaveToFile保存,此处示例为TStringList,TBitmap、TMemoryStream等类的调用逻辑一致
TStringList *list = new TStringList();
list->Add("公共可见的保存内容");
list->SaveToFile(savePath, TEncoding::UTF8);
delete list;

验证说明

保存完成后打开系统自带的文件管理器,进入「内部存储 -> Documents -> 你的应用名称」目录,即可看到保存的文件。

内容的提问来源于stack exchange,提问作者Courant Yin-Jiun Tseng

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 14:24:03