【问题标题】:How to save a file on Android? (Firemonkey)如何在 Android 上保存文件? (火猴)
【发布时间】:2013-09-22 08:51:21
【问题描述】:

如何在 Android 设备上本地保存文件, 使用 Delphi (XE5, Firemonkey)?

简单的事情

  Memo.Lines.SaveToFile('test.txt')

似乎不起作用。 它会导致以下错误消息:

“无法创建文件“/test.txt”。不是目录。”

【问题讨论】:

  • 当你说本地时,你是什么意思? SDCard(内部/外部?),私人数据?其他?如果没有 root 和权限,您无法在 / 中创建文件。
  • 我希望我可以在内部存储的“当前目录”中写入(无论它在哪里)。请注意,我没有在文件名之前指定反斜杠。我很惊讶它似乎试图在根目录中写入。
  • 我也试过这条路径:“/Android/data/com.embarcadero.TestLocalStorage/files/”(developer.android.com/guide/topics/data/data-storage.html 似乎表明这可能是内部存储的合适位置)。但得到了相同的结果

标签: android delphi firemonkey


【解决方案1】:

不用System.SysUtils.PathDelim,你可以用

System.IOUtils.TPath.Combine(System.IOUtils.tpath.getdocumentspath,'test.txt');

Combine 在 windows \ 和 Linux / 之间进行选择

System.IOUtils 必须在这一行中使用,而不是在uses 子句中使用setup,因为可能有更多的Tpath 首字母。

【讨论】:

    【解决方案2】:

    在我的设备上(可能是所有 android 设备?)GetHomePath 错误地给了我 /storage/emulated/0/... 而我需要 /storage/sdcard0/... 才能通过 USB 访问 Windows 资源管理器中可见的存储.

    所以我的文件的完整路径可能是 '/storage/sdcard0/Android/data/com.embarcadero.(我的应用名称)/files/'

    如果你有一个插入 SD 卡,这可能是 sdcard1 或其他。

    您可以使用这样的代码列出设备存储文件夹的内容

      P := '/storage/';
      if (FindFirst(P + '*', faAnyFile, Sr) = 0) then
      repeat
        Memo1.Lines.Add(Sr.Name);
      until (FindNext(Sr) <> 0);
      FindClose(Sr);
    

    在我的设备上,这给了我:

    SD卡0 USB 模拟

    然后当你想探索子文件夹时更改 S

    请注意,每次重新编译和部署时,文件夹都会被清空。

    【讨论】:

      【解决方案3】:

      GetHomePath,返回一个带路径的字符串。 -> '数据/数据//文件'

      你可以使用:

      Memo.Lines.SaveToFile(format('%s/test.txt', [GetHomePath]));
      

      或者这个表格

      Memo.Lines.SaveToFile(GetHomePath + '/test.txt');
      

      【讨论】:

        【解决方案4】:

        根据文档Creating an Android App,获取文档路径如下:

        System.IOUtils.TPath.GetDocumentsPath + System.SysUtils.PathDelim + 'myfile';
        

        【讨论】:

        • 这就是我想要的。非常感谢!顺便说一句:在这种情况下:不需要特定的权限。
        • 你不想使用 Path.Combine 或其他功能吗
        猜你喜欢
        • 2019-03-06
        • 1970-01-01
        • 2011-12-13
        • 2012-02-24
        • 1970-01-01
        • 1970-01-01
        • 2018-05-05
        • 2013-10-07
        • 1970-01-01
        相关资源
        最近更新 更多