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."
Selon le document Création d’une application Android , obtenez le chemin des documents comme suit:
System.IOUtils.TPath.GetDocumentsPath + System.SysUtils.PathDelim + 'myfile';
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.
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.
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');