Как сохранить файл на Android? (FireMonkey)

Как сохранить файл локально на устройстве Android, используя Delphi (XE5, Firemonkey)?

Что-то простое, как

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

похоже, не работает. В результате появляется следующее сообщение об ошибке:

"Невозможно создать файл" /test.txt ". Не каталог.

Ответ 1

В соответствии с документом Создание приложения для Android найдите путь к документам следующим образом:

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

Ответ 2

Вместо использования System.SysUtils.PathDelim вы можете использовать

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

Combine выбор между окнами \ и Linux /

System.IOUtils должен использоваться в этой строке вместо настройки в предложении использования, потому что, вероятно, больше инициалов Tpath.

Ответ 3

GetHomePath, верните строку с контуром. - > 'data/data//files'

Вы можете использовать:

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

Или эта форма

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

Ответ 4

на моем устройстве (и, предположительно, на всех устройствах Android?) GetHomePath неправильно дает мне /storage/emulated/ 0/... тогда как мне нужно /storage/sdcard 0/..., чтобы добраться до хранилища, видимого в проводнике Windows через USB.

поэтому полный путь к моим файлам может быть '/storage/sdcard0/Android/data/com.embarcadero.(my имя приложения)/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, если вы хотите исследовать подпапки

Обратите внимание, что папка файлов становится очищенной при каждом повторном компиляции и развертывании.