web-dev-qa-db-ja.com

Androidでファイルを保存する方法は? (Firemonkey)

Androidデバイス、Delphi(XE5、Firemonkey)を使用して)ファイルをローカルに保存するにはどうすればよいですか?

簡単なもの

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

動作していないようです。その結果、次のエラーメッセージが表示されます。

「ファイル「/test.txt」を作成できません。ディレクトリではありません。」

11
Reinier

ドキュメントに従って Android App を作成して、次のようにドキュメントパスを取得します。

System.IOUtils.TPath.GetDocumentsPath + System.SysUtils.PathDelim + 'myfile';
16
Marcus Adams

System.SysUtils.PathDelimを使用する代わりに、

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

Combineは、ウィンドウ\とLinux /のどちらかを選択します

System.IOUtilsは、おそらくより多くのTpathイニシャルがあるため、uses句で設定する代わりに、この行で使用する必要があります。

10
user3015173

GetHomePath、パスを含む文字列を返します。 -> 'data/data // files'

あなたが使用することができます:

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

またはこのフォーム

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

私のデバイス(そしておそらくすべてのAndroidデバイス?))GetHomePathは/ storage/emulated/0/...を誤って与えます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フォルダーは、再コンパイルしてデプロイするたびに空になることに注意してください。

1
Leslie Kaye