web-dev-qa-db-fra.com

Comment enregistrer un fichier sur Android? (Firemonkey)

Comment enregistrer un fichier localement sur un périphérique Android, à l'aide de Delphi (XE5, Firemonkey)?

Quelque chose d'aussi simple que

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

ne semble pas fonctionner. Il en résulte le message d'erreur suivant:

"Impossible de créer le fichier" /test.txt ". Ce n'est pas un répertoire."

8
Reinier

Selon le document Création d’une application Android , obtenez le chemin des documents comme suit:

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

Au lieu d'utiliser System.SysUtils.PathDelim, vous pouvez utiliser

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

Combine choisit entre le \ de Windows et le / de Linux

System.IOUtils doit être utilise dans cette ligne au lieu d'être configuré dans la clause uses car il y a probablement plus d'initiales Tpath.

9
user3015173

sur mon appareil (et vraisemblablement tous les appareils Android?) GetHomePath me donne incorrectement/storage/emulated/0/... alors que j'ai besoin de/storage/sdcard0/... pour accéder au stockage visible dans l'explorateur Windows via USB.

le chemin d'accès complet à mes fichiers peut donc être '/storage/sdcard0/Android/data/com.embarcadero.(my nom de l'application)/files /'

Vraisemblablement, si vous avez une carte SD insérée, il peut s’agir de sdcard1 ou autre.

Vous pouvez lister le contenu du dossier de stockage de votre appareil avec un code comme celui-ci.

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

Sur mon appareil, cela me donne:

sdcard0 usb émulé

puis changez S lorsque vous souhaitez explorer des sous-dossiers

Notez que le dossier de fichiers est vidé chaque fois que vous recompilez et déployez.

1
Leslie Kaye

GetHomePath, retourne une chaîne avec le chemin. -> 'données/données // fichiers'

Vous pouvez utiliser:

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

Ou ce formulaire

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