AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Textdatei auf Android auslesen

Ein Thema von CK14 · begonnen am 4. Mär 2025 · letzter Beitrag vom 5. Mär 2025
Antwort Antwort
CK14

Registriert seit: 5. Apr 2019
6 Beiträge
 
Delphi 10.4 Sydney
 
#1

Textdatei auf Android auslesen

  Alt 4. Mär 2025, 16:55
Hallo!

Wahrscheinlich ist meine Frage trivial, aber ich bekomme es trotzdem nicht hin.

Ich versuche eine Textdatei auf dem Android Tablet (Android 13) mit textfile / readln auszulesen.
Die Datei liegt im Ordner Documents.
Ich bekomme den E/A Fehler 13 zurück gemeldet.


Delphi-Quellcode:
procedure TFrmGA3.PanLoadClick(Sender: TObject);
var
 tndatnam, zeile1, zeile2, zw1, zw2 : string;
 tndat : textfile;
 i : integer;
begin
 tndatnam := '/storage/emulated/0/documents/tnliste.txt'
 assignfile(tndat,tndatnam);
 reset(tndat);
 readln(tndat,zeile1);
 closefile(tndat);

end;


Wie mache ich das? Vielen Dank!


Grüße Christian

(Deplhi 12)
Christian

Geändert von TBx ( 4. Mär 2025 um 17:47 Uhr) Grund: Delphi-Tags eingefügt
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.981 Beiträge
 
Delphi 12 Athens
 
#2

AW: Textdatei auf Android auslesen

  Alt 4. Mär 2025, 17:08
Ich weiß nur das man um eine Datei aus der Sandbox der App heraus zu bekommen Ein Fileprovider geschrieben/Konfiguriert/benutzt werden muss.
Ich kann mir vorstellen, dass für den umgekehrten weg: Eine Datei in die Sandbox der App hinein bekommen, ein ähnlicher mechanismus genutzt weren muss.. "FileReceiver" oder so
Der dann quasi die App als empfänger für einen bestimmten MIME context in Android registriert.
Jetzt mal so ins blaue geraten... Vieleicht helfen dir die Stichworte bei der suche.
Andreas
Monads? Wtf are Monads?
  Mit Zitat antworten Zitat
AuronTLG

Registriert seit: 2. Mai 2018
Ort: Marburg
318 Beiträge
 
Delphi 12 Athens
 
#3

AW: Textdatei auf Android auslesen

  Alt 4. Mär 2025, 17:09
Bei der Entwicklung für mobile Geräte empfehle ich grundsätzlich die Nutzung der Methoden aus System.IOUtils.TPath für alles, was irgendwie mit Pfaden zu tun hat, anstatt sich die Pfade manuell zusammenzubauen, da Letzteres sehr fehleranfällig ist.

In deinem Fall würde ich also "/storage/emulated/0/documents" durch "TPath.GetSharedDocumentsPath" ersetzen und das ganze mit dem Dateinamen per "TPath.Combine" verbinden.
Also quasi so:

tndatnam := TPath.Combine(TPath.GetSharedDocumentsPath, 'tnliste.txt');
Wenn die Datei wirklich unter diesem Pfad liegt (FileExists(tndatnam)?), sollte das auf diese Weise eigentlich funktionieren.

Nachtrag: Fast vergessen: Die Berechtigung für den Zugriff auf den externen Speicher sitzt? Ich glaube, die braucht man dafür.
Nachtrag2: Gerade nochmal nachgeschaut: Für den Zugriff auf den eigenen Ordner im externen Speicher sollte die Berechtigung tatsächlich NICHT notwendig sein.

Geändert von TBx ( 4. Mär 2025 um 17:50 Uhr) Grund: Code-Tags durch Delphi-Tags ersetzt
  Mit Zitat antworten Zitat
CK14

Registriert seit: 5. Apr 2019
6 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Textdatei auf Android auslesen

  Alt 4. Mär 2025, 17:38
Vielen Dank für die schnellen Antworten!

ich habe die Zeile übernommen (angepasst):

tndatnam := TPath.Combine(TPath.GetSharedDocumentsPath, '/tnliste.txt');
Der Fehler bleibt aber bestehen.
Christian

Geändert von TBx ( 4. Mär 2025 um 17:49 Uhr) Grund: Delphi-Tags eingefügt
  Mit Zitat antworten Zitat
AuronTLG

Registriert seit: 2. Mai 2018
Ort: Marburg
318 Beiträge
 
Delphi 12 Athens
 
#5

AW: Textdatei auf Android auslesen

  Alt 4. Mär 2025, 17:50
Vielen Dank für die schnellen Antworten!

ich habe die Zeile übernommen (angepasst):

tndatnam := TPath.Combine(TPath.GetSharedDocumentsPath, '/tnliste.txt');

Der Fehler bleibt aber bestehen.
Bei der Verwendung von TPath.Combine bitte das "/" weglassen. Die Methode TPath.Combine kümmert sich selbst darum, dass zusammenzukitten.

Danach versuch bitte mal ein FileExists auf "tndatnam", einfach um sicherzugehen, dass die Datei auch gefunden wird.

Wenn es mit korrektem Pfad immer noch nicht funktioniert, würde ich vermutlich mal mir die Berechtigungen anschauen:
Ich habe seit Ewigkeiten in meinen Apps nicht mehr den externen Speicher angesprochen, von daher weiß ich leider nicht mehr genau, wie es da mit den Berechtigungen aussieht, aber es gibt zwei Berechtigungen dafür, die man unter Projekt -> Optionen -> Anwedung -> Berechtigungen findet. Genauer gesagt gibt es bei den "gefährlichen" Berechtigungen "Externen Speicher lesen" und "Externen Speicher schreiben".
Es ist möglich, dass in deinem Fall die Berechtigung für das Lesen des externen Speichers notwendig ist, ich bin mir aber wie gesagt nicht mehr sicher.

Sollte die Berechtigung notwendig sein, müsstest du dir mal anschauen, wie man zur Laufzeit abgefragte Berechtigungen setzt. Ich bin mir ebenfalls gerade nicht sicher, ob das Anhaken bei dieser Berechtigung in den Projektoptionen ausreicht, oder ob man mit PermissionsService.RequestPermissions arbeiten muss.
  Mit Zitat antworten Zitat
philipp.hofmann

Registriert seit: 21. Mär 2012
Ort: Hannover
910 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Textdatei auf Android auslesen

  Alt 4. Mär 2025, 19:05
Das Zauberwort heißt SAF.
Ohne größere Schwierigkeiten kann die App nur Dateien aus /Android/media/[App-Name]/ lesen.
Ich lasse die Dateien im Explorer auswählen und kopiere sie dann dorthin.
  Mit Zitat antworten Zitat
fisipjm

Registriert seit: 28. Okt 2013
315 Beiträge
 
Delphi 12 Athens
 
#7

AW: Textdatei auf Android auslesen

  Alt 5. Mär 2025, 08:09
Das Zauberwort heißt SAF.
Ohne größere Schwierigkeiten kann die App nur Dateien aus /Android/media/[App-Name]/ lesen.
Ich lasse die Dateien im Explorer auswählen und kopiere sie dann dorthin.
Moin phillip,
für den sharedDocumentsPath braucht es kein StorageAccessFramework. Der sharedDocumentsPath ist ja genau dafür gedacht. hier kannst du sowohl alle Dateien die andere APPs hier rein legen lesen als auch deine Dateien für andere APPs sichtbar ablegen.
siehe: https://docwiki.embarcadero.com/Libr...dDocumentsPath

Man muss zwar keine Benutzerrechte Abfragen (Zur Laufzeit die Erlaubnis einholen) aber man braucht auf jeden Fall den Zugriff auf den externen Speicher.
Siehe: https://developer.android.com/refere...lang.String%29
Zitat:
There is no security enforced with these files. For example, any application holding Manifest.permission.WRITE_EXTERNAL_STORAGE can write to these files.
Die Manifest permission wird über die Projekteinstellungen --> Berechtigungen --> Externer Speicher gesetzt.

Ansonsten wäre die Prüfung auf Existenz der Datei nicht schlecht
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:19 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz