如何在Android设备上本地保存文件, 使用Delphi(XE5,Firemonkey)?
像
这样简单 Memo.Lines.SaveToFile('test.txt')
似乎不起作用。 它会导致以下错误消息:
“无法创建文件”/test.txt“。不是目录。”
答案 0 :(得分:15)
根据文档Creating an Android App,获取文档路径:
System.IOUtils.TPath.GetDocumentsPath + System.SysUtils.PathDelim + 'myfile';
答案 1 :(得分:9)
您可以使用
,而不是使用System.SysUtils.PathDelim
System.IOUtils.TPath.Combine(System.IOUtils.tpath.getdocumentspath,'test.txt');
Combine
在Windows \
和Linux /
System.IOUtils
必须在此行中使用,而不是在uses子句中使用,因为可能有更多的Tpath首字母。
答案 2 :(得分:1)
在我的设备上(可能是所有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
请注意,每次重新编译和部署时,files文件夹都会被清空。
答案 3 :(得分:0)
GetHomePath,返回带路径的字符串。 - &GT; '数据/数据文件//'
您可以使用:
Memo.Lines.SaveToFile(format('%s/test.txt', [GetHomePath]));
或者这个表格
Memo.Lines.SaveToFile(GetHomePath + '/test.txt');