Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   TPath.GetIrgendwas (https://www.delphipraxis.net/190554-tpath-getirgendwas.html)

himitsu 15. Okt 2016 01:45

TPath.GetIrgendwas
 
Moin,

sagt mal, bin ich der Einzige oder kommt es mir nur so vor, als wenn OH und Funktion oft nicht übereinstimmen?

Beispiel:

Delphi-Referenz durchsuchenTPath.GetDocumentsPath
Zitat:

Gibt den Pfad zu dem Verzeichnis zurück, in dem die Dokumente des Benutzers gespeichert sind.

Unter Windows und Mac OS X zeigt die Funktion auf ein benutzerspezifisches, anwendungsunabhängiges Verzeichnis.
Unter iOS und Android zeigt die Funktion auf ein benutzerspezifisches, anwendungsunabhängiges Verzeichnis.
"anwendungsunabhängiges" heißt für mich, das im Pfad nichts von der Anwendung drin ist, also wo alle Anwendungen den selben Pfad haben.

Zitat:

Windows = C:\Benutzer\<Benutzername>\Dokumente
Mac OS X = /Users/<Benutzername>/Documents
iOS-Simulator = /Users/<Benutzername>/Library/Application Support/iPhone Simulator/<SDK-Version>/Applications/<Anwendungs-ID>/Documents
iOS-Gerät = /var/mobile/Applications/<Anwendungs-ID>/Documents
Android = /data/data/<Anwendungs-ID>/files
Und sowas kommt bei Vielen der verfügbaren Pfaden vor ... es heißt "benutzerunabhängig" oder "anwendungsunabhängiges", aber der Pfad sagt dann doch was Anderes. :wall:
(in den mobilen Geräten gibt es meistens nur einen Benutzer, aber dafür hat jede Anwendung quasi ihren eigenen Benutzer, entsprechend der AppID)

t.roller 15. Okt 2016 08:35

AW: TPatn.GetIrgendwas
 
Siehe: http://www.delphipraxis.net/1348865-post5.html

p80286 15. Okt 2016 08:45

AW: TPatn.GetIrgendwas
 
Nun sei doch nicht so pingelig. Bei Worten mit mehr als 20 Buchstaben sind doch Ungenauigkeiten vorprogrammiert. Und eine Fehlerquote von 10% sollte doch tolerierbar sein!

Gruß
K-H

Daniel 15. Okt 2016 09:51

AW: TPath.GetIrgendwas
 
In der Tat ist das Wort "anwendungsunabhängig" für die mobilen Plattformen falsch.
Der Pfad kann sich aber auch gern mal ändern, so geschehen mit dem Update auf iOS8. Für iOS musst Du wissen, dass Deine App in einer eigenen geschützten Umgebung läuft und damit alle o.g. Ordner zwingend anwendungs-spezifisch sind. Du bekommst vom Betriebssystem den jeweils korrekten Pfad geliefert, an dem man auch nicht rütteln kann. Ob da also die App-ID drinsteht oder nicht, muss letztlich nur das mobile Betriebssystem wissen.

himitsu 15. Okt 2016 10:00

AW: TPatn.GetIrgendwas
 
In der OH steht auch womit der Pfad geholt wird/übereinstimmt, aber der Code macht dann ebenfalls was Anders. :stupid:

Laut OH, bis WinXP mit CSIDL_***, ab Vista mit FOLDERID_*** und wenn ich in den Code gucke, dann seh ich entweder nur das WinXP-Zeugs oder was Anderes.
Aber egal, wenn das Richtige rauskommt, wäre es ja nicht so schlimm.

Wenn aber "benutzerunabhängig" drin steht und ich in verschiedenen eingeloggten Benutzern nicht das selbe Verzeichnis bekomme und somit im anderen Nutzer die Dateien nicht finde, dann ist das schon ein "kleines" Problem. :cry:

[add]
Ist im Android ja auch so, also das Jede App mit den Rechten eines eigenen Nutzers läuft und so z.B. nur auf seine Programmdateien, aber nicht auf die anderer Apps drauf kommt.

Zitat:

Ob da also die App-ID drinsteht oder nicht, muss letztlich nur das mobile Betriebssystem wissen.
Eben nicht, denn wenn ich jetzt z.B. zwei Programme hab, die die selben Dateien nutzen sollen, dann sollte das Verzeichnis die TPath.Methode, wo steht, dass es sie bietet, das dann doch auch machen?
Und wenn da explizit "anwendungsunabhängig", dann sollte das doch möglichst auch so sein, egal wie das OS mit den "Benutzern" umgeht.


Fazit: Ich schreibe grade meine eigenen TPath methoden, die für die wichtigstens Pfade dann auch so machen, wie sie gedacht sind. :stupid:

Mavarik 15. Okt 2016 10:32

AW: TPatn.GetIrgendwas
 
Zitat:

Zitat von himitsu (Beitrag 1350945)
Eben nicht, denn wenn ich jetzt z.B. zwei Programme hab, die die selben Dateien nutzen sollen, dann sollte das Verzeichnis die TPath.Methode, wo steht, dass es sie bietet, das dann doch auch machen?

Irre ich mich? Das geht sowieso nicht.

Du bist in einer Sandbox und hast auf andere Verzeichnisse keine Zugriffsrechte. (Jedenfalls auf iOS und ich glaube auf Android auch!)

Hab noch nie versucht!

Daniel 15. Okt 2016 10:32

AW: TPath.GetIrgendwas
 
Wie möchtest Du denn z.B. unter iOS aus Deiner geschützten Umgebung ausbrechen? Da ist doch deutlich mehr nötig, als sich nur einen Pfad auszudenken - mit einem Äquivalent zu TPath wirst Du, egal in welche Richtung Du läufst, gegen eine Wand rennen. (Lassen wir Jailbreaks mal unberücksichtigt.)
Hier wirst Du Synchronisations-Lösugnen wie iCloud, DropBox oder Vergleichbares benötigen.

//edit: Die Doku ist an dieser Stelle mit dem Wort "anwendungsunabhängig" unbestritten falsch und verspricht Dinge, die systembedingt nicht eingehalten werden können.

Mavarik 15. Okt 2016 10:43

AW: TPath.GetIrgendwas
 
Zitat:

Zitat von Daniel (Beitrag 1350952)
Wie möchtest Du denn z.B. unter iOS aus Deiner geschützten Umgebung ausbrechen?

Was ist mit Android?

Es gibt doch neben Cloud und Dropbox noch dir Möglichkeit per URL eine andere App an zu sprechen... Ginge das nicht? So wie ein REST Call?

Daniel 15. Okt 2016 10:56

AW: TPath.GetIrgendwas
 
Unter Android hast Du den sog. "external storage", auf dem sich öffentliche Dateien ablegen lassen. Der Name leitet sich aus den früheren Geräte-Generationen ab, die einen SD-Einschub hatten und auf diese Weise zusätzlichen Speicherplatz boten. Das Konzept des "externen Speichers" ist mittlerweile in Android verwurzelt, so dass diese Option auch besteht, selbst wenn hardware-seitig KEIN echter externer Speicher existiert. In diesem Fall nutzt das Betriebssystem einen Teil des internen Speichers.
Voraussetzung für all das ist, dass man sich die entsprechenden Rechte eingefordert hat.

Mavarik 15. Okt 2016 11:09

AW: TPath.GetIrgendwas
 
Zitat:

Zitat von Daniel (Beitrag 1350955)
Das Konzept des "externen Speichers" ist mittlerweile in Android verwurzelt, so dass diese Option auch besteht, selbst wenn hardware-seitig KEIN echter externer Speicher existiert. In diesem Fall nutzt das Betriebssystem einen Teil des internen Speichers.

Ohh gut zu wissen... Hab darauf nie versucht zuzugreifen, da ich befürchtet habe, dass wenn keine SD Karte existiert ich nur eine Exception bekomme.

Mavarik


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:52 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz