如何使用 Delphi(XE5、Firemonkey)在 Android 设备上本地保存文件?
像这样简单的东西
Memo.Lines.SaveToFile('test.txt')
似乎不起作用。它会导致以下错误消息:
“无法创建文件“/test.txt”。不是目录。”
如何使用 Delphi(XE5、Firemonkey)在 Android 设备上本地保存文件?
像这样简单的东西
Memo.Lines.SaveToFile('test.txt')
似乎不起作用。它会导致以下错误消息:
“无法创建文件“/test.txt”。不是目录。”
根据文档Creating an Android App,获取文档路径如下:
System.IOUtils.TPath.GetDocumentsPath + System.SysUtils.PathDelim + 'myfile';
而不是使用System.SysUtils.PathDelim
,您可以使用
System.IOUtils.TPath.Combine(System.IOUtils.tpath.getdocumentspath,'test.txt');
Combine
在 windows\
和 Linux之间进行选择/
System.IOUtils
必须在这一行中使用,而不是在uses 子句中使用setup,因为可能有更多的Tpath 首字母。
在我的设备上(可能是所有 android 设备?)GetHomePath 错误地给了我 /storage/emulated/0/... 而我需要 /storage/sdcard0/... 才能通过 USB 访问 Windows 资源管理器中可见的存储。
所以我的文件的完整路径可能是 '/storage/sdcard0/Android/data/com.embarcadero.(my app name)/files/'
据推测,如果你有一个插入 SD 卡,这可能是 sdcard1 或其他。
您可以使用这样的代码列出设备存储文件夹的内容
P := '/storage/';
if (FindFirst(P + '*', faAnyFile, Sr) = 0) then
repeat
Memo1.Lines.Add(Sr.Name);
until (FindNext(Sr) <> 0);
FindClose(Sr);
在我的设备上,这给了我:
sdcard0 USB 模拟
然后在您想探索子文件夹时更改 S
请注意,每次重新编译和部署时,文件文件夹都会被清空。
GetHomePath,返回一个带路径的字符串。-> '数据/数据//文件'
您可以使用:
Memo.Lines.SaveToFile(format('%s/test.txt', [GetHomePath]));
或者这个表格
Memo.Lines.SaveToFile(GetHomePath + '/test.txt');