Delphi-PRAXiS

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

Daniel 15. Okt 2016 11:29

AW: TPath.GetIrgendwas
 
Die kannst Du dennoch bekommen, zum Beispiel dann, wenn das Android-Gerät per USB an einen Rechner angeschlossen ist und der externe Speicher dort "gemounted" ist. Für diesen Zeitraum ist der externe Speicher exklusiv für den angeschlossenen PC verfügbar und nicht mehr für die Apps auf dem Gerät - gleich, welche Rechte diese haben.

Mavarik 15. Okt 2016 11:35

AW: TPath.GetIrgendwas
 
Zitat:

Zitat von Daniel (Beitrag 1350964)
Die kannst Du dennoch bekommen, zum Beispiel dann, wenn das Android-Gerät per USB an einen Rechner angeschlossen ist und der externe Speicher dort "gemounted" ist. Für diesen Zeitraum ist der externe Speicher exklusiv für den angeschlossenen PC verfügbar und nicht mehr für die Apps auf dem Gerät - gleich, welche Rechte diese haben.

Ohh, dann hat sich die Idee sowieso schon erledigt... Danke für die Info :thumb:

himitsu 15. Okt 2016 12:24

AW: TPath.GetIrgendwas
 
SharedPictures ist unter Android ohne AppID, aber SharedDocuments dann doch wieder, also nix mit Shared.

Zitat:

Zitat von Mavarik (Beitrag 1350961)
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.

Dann geben die TPath.Get-Funktionen einen Leerstring zurück, wenn der Pfad nicht existiert.
Ich hoffe du prüfst das vor dem Zugriff. :angle2:

Jo, da wird das physische Laufwerk gemountet und nicht 'nen Fileserver dazwischengeschaltet.
Drum wird der interne Zugriff gesperrt, da dort kein sicheres Sharing möglich ist.
So kann man bei Kamers dann auch im PC die SD-Karte formatieren. (wenn die Karte als Laufwerk gemountet ist und nicht über das komische Picture-Protokoll, dessen Namen mir grade nicht einfällt)

Olli73 16. Okt 2016 12:20

AW: TPath.GetIrgendwas
 
Zitat:

Zitat von himitsu (Beitrag 1350972)
Jo, da wird das physische Laufwerk gemountet und nicht 'nen Fileserver dazwischengeschaltet.
Drum wird der interne Zugriff gesperrt, da dort kein sicheres Sharing möglich ist.
So kann man bei Kamers dann auch im PC die SD-Karte formatieren. (wenn die Karte als Laufwerk gemountet ist und nicht über das komische Picture-Protokoll, dessen Namen mir grade nicht einfällt)

Du meinst PTP bzw. MTP. Letzteres wird seit Android 3.1 unterstützt (laut Wikipedia). Also nix mehr mit mounten (nötig). Damit klappt dann auch der gemeinsame Dateizugriff.

Oder liege ich hier komplett falsch?

Sherlock 20. Okt 2016 14:37

AW: TPath.GetIrgendwas
 
Zum Topic: Immer die englische Hilfe lesen. Die Übersetzungen sind grauslig.

Sherlock

Rollo62 20. Okt 2016 17:11

AW: TPath.GetIrgendwas
 
Da wäre noch die Frage, gibt es eigentlich unterschiedliche Implementierungen von Android ?

Also ich meine Samsung hat andere Pfade oder Zugriffsrechte als Nexus oder LG ?
Hat da mal einer schlechte Erfahrungen gemacht ?

Rollo

himitsu 20. Okt 2016 17:26

AW: TPath.GetIrgendwas
 
Alle TPath.Get-Funktionen fragen auf den jeweiligem System das OS nach den "aktuelen" Pfaden für das, was man grade haben will.

Wenn z.B. der Pfad für deine Fotos unterschiedlich ist, dann "sollte" TPath.DetPicturePath auch jeweils das Richtige liefern.

himitsu 23. Okt 2016 01:39

AW: TPath.GetIrgendwas
 
Ich hatte mich mal bissl umgeguckt und vorallem das aus OH/Doku von Delphi/Android/Apple und meinen alten RTL-Quellcodes zusammengefasst.
Im Prinzip sind das die Pfade, auf die man in den verschiedenen OS Zugriff drauf hat, so weit ich das richtig erkannt hab.
iOS Data Storage Guidelines
File System Programming Guide
File System Programming Guide (OSX)
  • Warum zeigen in iOS/OSX die TPath.GetSchared nicht auf Unterverzeichnisse von "Public"?
  • GetDownloadPath für Windows stimmt auch mit keinem Standardpfad irgendeines Browsers überein.
  • GetSharedDocumentsPath beim Android ist nicht Shared, aber dafür ist GetDocumentsPath Shared. :freak:
  • Und obwohl in der OH bei jeder GetPath-Methode als Erstes steht, dass diese Methoden ein '' zurückgeben, wenn der Path nicht vorhanden ist, tuten sie das nicht. (Ja, weiter unten steht manchmal nochma das Gegenteil, aber egal)

Also jeweils OS, die Hauptunktion, welche drauf zeigt, und dann noch der Pfad, alles sortiert nach Pfaden.
Code:
Android        GetLibraryPath             /data/app-lib/:AppID:
Android        GetCachePath               /data/data/:AppID:/cache
Android        GetDocumentsPath&HomePath  /data/data/:AppID:/files
Android        GetPublicPath              /storage/emulated/0/Android/data/:AppID:/files
Android        GetAlarmsPath              /storage/emulated/0/Android/data/:AppID:/files/Alarms
Android        GetCameraPath              /storage/emulated/0/Android/data/:AppID:/files/DCIM
Android        GetDownloadsPath           /storage/emulated/0/Android/data/:AppID:/files/Download
Android        GetMoviesPath              /storage/emulated/0/Android/data/:AppID:/files/Movies
Android        GetMusicPath               /storage/emulated/0/Android/data/:AppID:/files/Music
Android        GetPicturesPath            /storage/emulated/0/Android/data/:AppID:/files/Pictures
Android        GetRingtonesPath           /storage/emulated/0/Android/data/:AppID:/files/Ringtones
Android                                    /storage/emulated/0/Android/data/:AppID:/files/cache
Android                                    /storage/emulated/0/Android/data/:AppID:/files/files
Android        GetTempPath                /storage/emulated/0/Android/data/:AppID:/files/tmp
Android        GetSharedAlarmsPath        /storage/emulated/0/Alarms
Android                                    /storage/emulated/0/DCIM
Android        GetSharedDownloadsPath     /storage/emulated/0/Download
Android        GetSharedMoviesPath        /storage/emulated/0/Movies
Android        GetSharedMusicPath         /storage/emulated/0/Music
Android        GetSharedPicturesPath      /storage/emulated/0/Pictures
Android        GetSharedRingtonesPath     /storage/emulated/0/Ringtones


iOS-Gerät      GetHomePath                /private/var/mobile/Applications/:AppID:
iOS-Gerät      GetTempPath                /private/var/mobile/Applications/:AppID:/tmp
iOS-Simulator  GetHomePath                /var/mobile/Applications/:AppID:
iOS            GetDocumentsPath           /var/mobile/Applications/:AppID:/Documents
iOS-Simulator  GetDownloadsPath           /var/mobile/Applications/:AppID:/Downloads
iOS            GetLibraryPath             /var/mobile/Applications/:AppID:/Library
iOS            GetCachePath               /var/mobile/Applications/:AppID:/Library/Caches
iOS-Simulator  GetMoviesPath              /var/mobile/Applications/:AppID:/Movies
iOS-Simulator  GetMusicPath               /var/mobile/Applications/:AppID:/Music
iOS-Simulator  GetPicturesPath            /var/mobile/Applications/:AppID:/Pictures
iOS-Simulator  GetPublicPath              /var/mobile/Applications/:AppID:/Public
iOS-Simulator  GetTempPath                /var/mobile/Applications/:AppID:/tmp

iOS            shared files               only via Public-directories, iCloud or similar (application are sandboxed)
iOS-Simulator  -                           /var/mobile/Applications -> /Users/:UserName:/Library/Application Support/iPhone Simulator/<SDK-Version>/Applications


Mac OS X       ud GetHomePath             /Users/:UserName:
Mac OS X       user domain                /Users/:UserName:/Desktop
Mac OS X       ud GetDocumentsPath        /Users/:UserName:/Documents
Mac OS X       ud GetDownloadsPath        /Users/:UserName:/Downloads
Mac OS X       ud GetLibraryPath          /Users/:UserName:/Library
Mac OS X       ud GetCachePath            /Users/:UserName:/Library/Caches
Mac OS X       ud GetMoviesPath           /Users/:UserName:/Movies
Mac OS X       ud GetMusicPath            /Users/:UserName:/Music
Mac OS X       ud GetPicturesPath         /Users/:UserName:/Pictures
Mac OS X       ud GetPublicPath           /Users/:UserName:/Public
Mac OS X       user domain                /Users/Shared
Mac OS X       -  GetTempPath             /var/folders/:RandomDir:
Mac OS X       local domain               /Applications
Mac OS X       local domain               /Applications/Utilities
Mac OS X       local domain               /Developer
Mac OS X       local domain               /Library
Mac OS X       system domain              /System
Mac OS X       system domain              /System/Library

iOS /Mac OS    the Public directory is accessible by other users/applications on the system


Windows        GetCache&DownloadsPath     C:\Users\:UserName:\AppData\Local
Windows        GetTempPath                C:\Users\:UserName:\AppData\Local\Temp
Windows        GetHomePath                C:\Users\:UserName:\AppData\Roaming
Windows        GetPicturesPath            C:\Users\:UserName:\Pictures
Windows        GetDocumentsPath           C:\Users\:UserName:\Documents
Windows        GetMoviesPath              C:\Users\:UserName:\Videos
Windows        GetMusicPath               C:\Users\:UserName:\Music
Windows        GetSharedPicturesPath      C:\Users\Public\Pictures
Windows        GetSharedDocumentsPath     C:\Users\Public\Documents
Windows        GetSharedMusicPath         C:\Users\Public\Music
Windows        GetSharedMoviesPath        C:\Users\Public\Videos
Windows        GetPublicPath              C:\ProgramData
Windows        GetLibraryPath             C:\Program Files\:InstallPath:
Und 'ne kleine Testfunktion, welche Nachfolgendes anzeigt.
Delphi-Quellcode:
uses
  System.IOUtils;

procedure TForm6.FormShow(Sender: TObject);
begin
  Memo1.Lines.Clear;
  Memo1.Lines.Add('GetLibraryPath        ' + TPath.GetLibraryPath);
  Memo1.Lines.Add('');
  Memo1.Lines.Add('GetHomePath           ' + TPath.GetHomePath);
  Memo1.Lines.Add('GetCachePath          ' + TPath.GetCachePath);
  Memo1.Lines.Add('GetTempPath           ' + TPath.GetTempPath);
  Memo1.Lines.Add('GetPublicPath         ' + TPath.GetPublicPath);
  Memo1.Lines.Add('');
  Memo1.Lines.Add('GetDocumentsPath      ' + TPath.GetDocumentsPath);
  Memo1.Lines.Add('GetPicturesPath       ' + TPath.GetPicturesPath);
  Memo1.Lines.Add('GetCameraPath         ' + TPath.GetCameraPath);
  Memo1.Lines.Add('GetMusicPath          ' + TPath.GetMusicPath);
  Memo1.Lines.Add('GetAlarmsPath         ' + TPath.GetAlarmsPath);
  Memo1.Lines.Add('GetRingtonesPath      ' + TPath.GetRingtonesPath);
  Memo1.Lines.Add('GetMoviesPath         ' + TPath.GetMoviesPath);
  Memo1.Lines.Add('GetDownloadsPath      ' + TPath.GetDownloadsPath);
  Memo1.Lines.Add('');
  Memo1.Lines.Add('GetSharedDocumentsPath ' + TPath.GetSharedDocumentsPath);
  Memo1.Lines.Add('GetSharedPicturesPath ' + TPath.GetSharedPicturesPath);
  Memo1.Lines.Add('GetSharedCameraPath   ' + TPath.GetSharedCameraPath);
  Memo1.Lines.Add('GetSharedMusicPath    ' + TPath.GetSharedMusicPath);
  Memo1.Lines.Add('GetSharedAlarmsPath   ' + TPath.GetSharedAlarmsPath);
  Memo1.Lines.Add('GetSharedRingtonesPath ' + TPath.GetSharedRingtonesPath);
  Memo1.Lines.Add('GetSharedMoviesPath   ' + TPath.GetSharedMoviesPath);
  Memo1.Lines.Add('GetSharedDownloadsPath ' + TPath.GetSharedDownloadsPath);
end;
Windows 7:
Code:
GetLibraryPath        C:\Users\Frank\Documents\Embarcadero\Studio\Projekte\Win32\Debug\

GetHomePath           C:\Users\Frank\AppData\Roaming
GetCachePath          C:\Users\Frank\AppData\Local
GetTempPath           C:\Users\Frank\AppData\Local\Temp\
GetPublicPath         C:\ProgramData

GetDocumentsPath      C:\Users\Frank\Documents
GetPicturesPath       C:\Users\Frank\Pictures
GetCameraPath         C:\Users\Frank\Pictures
GetMusicPath          C:\Users\Frank\Music
GetAlarmsPath         C:\Users\Frank\Music
GetRingtonesPath      C:\Users\Frank\Music
GetMoviesPath         C:\Users\Frank\Videos
GetDownloadsPath      C:\Users\Frank\AppData\Local

GetSharedDocumentsPath C:\Users\Public\Documents
GetSharedPicturesPath C:\Users\Public\Pictures
GetSharedCameraPath   C:\Users\Public\Pictures
GetSharedMusicPath    C:\Users\Public\Music
GetSharedAlarmsPath   C:\Users\Public\Music
GetSharedRingtonesPath C:\Users\Public\Music
GetSharedMoviesPath   C:\Users\Public\Videos
GetSharedDownloadsPath C:\ProgramData
Android 4:
Code:
GetLibraryPath        /data/app-lib/com.embarcadero.Project6-1

GetHomePath           /data/data/com.embarcadero.Project6/files
GetCachePath          /data/data/com.embarcadero.Project6/cache
GetTempPath           /storage/emulated/0/Android/data/com.embarcadero.Project6/files/tmp
GetPublicPath         /storage/emulated/0/Android/data/com.embarcadero.Project6/files

GetDocumentsPath      /data/data/com.embarcadero.Project6/files
GetPicturesPath       /storage/emulated/0/Android/data/com.embarcadero.Project6/files/Pictures
GetCameraPath         /storage/emulated/0/Android/data/com.embarcadero.Project6/files/DCIM
GetMusicPath          /storage/emulated/0/Android/data/com.embarcadero.Project6/files/Music
GetAlarmsPath         /storage/emulated/0/Android/data/com.embarcadero.Project6/files/Alarms
GetRingtonesPath      /storage/emulated/0/Android/data/com.embarcadero.Project6/files/Ringtones
GetMoviesPath         /storage/emulated/0/Android/data/com.embarcadero.Project6/files/Movies
GetDownloadsPath      /storage/emulated/0/Android/data/com.embarcadero.Project6/files/Download

GetSharedDocumentsPath /storage/emulated/0/Android/data/com.embarcadero.Project6/files
GetSharedPicturesPath /storage/emulated/0/Pictures
GetSharedCameraPath   /storage/emulated/0/DCIM
GetSharedMusicPath    /storage/emulated/0/Music
GetSharedAlarmsPath   /storage/emulated/0/Alarms
GetSharedRingtonesPath /storage/emulated/0/Ringtones
GetSharedMoviesPath   /storage/emulated/0/Movies
GetSharedDownloadsPath /storage/emulated/0/Download
Android 5 konnte ich nicht gucken, da meine Delphi-Programme da nicht mehr laufen.
Application does not support this System :cry:
und OSX/iOS hab'sch net.

t.roller 23. Okt 2016 07:05

AW: TPath.GetIrgendwas
 
Bei WIN8.1 kommt aber manchmal Unsinn heraus:

GetLibraryPath C:\Users\Roller\Documents\Embarcadero\Studio\Proje kte\20161022-TabControl\Win32\Debug\

GetHomePath C:\Users\Roller\AppData\Roaming
GetCachePath C:\Users\Roller\AppData\Local
GetTempPath C:\Users\Roller\AppData\Local\Temp\
GetPublicPath C:\ProgramData

GetDocumentsPath C:\Users\Roller\Documents
GetPicturesPath C:\Users\Roller\Pictures
GetCameraPath C:\Users\Roller\Pictures
GetMusicPath C:\Users\Roller\Music
GetAlarmsPath C:\Users\Roller\Music
GetRingtonesPath C:\Users\Roller\Music
GetMoviesPath C:\Users\Roller\Videos
GetDownloadsPath C:\Users\Roller\AppData\Local

GetSharedDocumentsPath C:\Users\Public\Documents
GetSharedPicturesPath C:\Users\Public\Pictures
GetSharedCameraPath C:\Users\Public\Pictures
GetSharedMusicPath C:\Users\Public\Music
GetSharedAlarmsPath C:\Users\Public\Music
GetSharedRingtonesPath C:\Users\Public\Music
GetSharedMoviesPath C:\Users\Public\Videos
GetSharedDownloadsPath C:\ProgramData

himitsu 23. Okt 2016 12:21

AW: TPath.GetIrgendwas
 
Sieht eigentlich "normal" aus, also was Embarcadero für normal hält.

Viele Pfade gibt es nicht und anstatt dann auch Nichts zurückgegeben wird, wird das umgeleitet.
Vorallem bei Camera, Alarm und Ringtone

Aber ganz Krank finde ich einfach PublicPath und SharedDownloadsPath ... da werden die öffentlichen/runtergeladenen Dateien in einem unsichtbaren Verzeichnis versenkt, denn im Explorer sieht der User standardmäßig C:\ProgramData garnicht, also kann man das nicht als Öffentlich ansehn.

Rollo62 24. Okt 2016 06:42

AW: TPath.GetIrgendwas
 
Hallo Himitzu,

danke für die tolle Liste, werde ich hier auch nochmal gegenchecken auf verschiedenen Geräten.

Eins ist mir aber nicht ganz klar:
Zitat:

GetSharedDocumentsPath beim Android ist nicht Shared, aber dafür ist GetDocumentsPath Shared.
Das fehlt aber unten, ist das ein Typo, und du meinst GetSharedDownloadsPath ?

Zitat:

Android GetLibraryPath /data/app-lib/:AppID:
Android GetCachePath /data/data/:AppID:/cache
Android GetDocumentsPath&HomePath /data/data/:AppID:/files
Android GetPublicPath /storage/emulated/0/Android/data/:AppID:/files
Android GetAlarmsPath /storage/emulated/0/Android/data/:AppID:/files/Alarms
Android GetCameraPath /storage/emulated/0/Android/data/:AppID:/files/DCIM
Android GetDownloadsPath /storage/emulated/0/Android/data/:AppID:/files/Download
Android GetMoviesPath /storage/emulated/0/Android/data/:AppID:/files/Movies
Android GetMusicPath /storage/emulated/0/Android/data/:AppID:/files/Music
Android GetPicturesPath /storage/emulated/0/Android/data/:AppID:/files/Pictures
Android GetRingtonesPath /storage/emulated/0/Android/data/:AppID:/files/Ringtones
Android /storage/emulated/0/Android/data/:AppID:/files/cache
Android /storage/emulated/0/Android/data/:AppID:/files/files
Android GetTempPath /storage/emulated/0/Android/data/:AppID:/files/tmp
Android GetSharedAlarmsPath /storage/emulated/0/Alarms
Android /storage/emulated/0/DCIM
Android GetSharedDownloadsPath /storage/emulated/0/Download
Android GetSharedMoviesPath /storage/emulated/0/Movies
Android GetSharedMusicPath /storage/emulated/0/Music
Android GetSharedPicturesPath /storage/emulated/0/Pictures
Android GetSharedRingtonesPath /storage/emulated/0/Ringtones
Rolf

himitsu 24. Okt 2016 10:28

AW: TPath.GetIrgendwas
 
Zitat:

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

Laut Apple ist das Public-Verzeichnis offen, also sollte jede Anwendung doch auch auf die Public-Verzeichnisse der anderen Anwendungen zugreifen können? :stupid:
https://developer.apple.com/library/...mOverview.html

Alles was nicht Sandboxed ist, k.A. was das für Programme sind, kann demnach eh auf viel mehr zugreifen.

Daniel 24. Okt 2016 10:36

AW: TPath.GetIrgendwas
 
Zitat:

Zitat von himitsu (Beitrag 1351859)
Laut Apple ist das Public-Verzeichnis offen, also sollte jede Anwendung doch auch auf die Public-Verzeichnisse der anderen Anwendungen zugreifen können? :stupid:
https://developer.apple.com/library/...mOverview.html

hm.
Ich habe auf der von Dir verlinkten Seite nach dem Wort "Public" gesucht. Die Public-Verzeichnisse werden im Zusammenhang mit OSX gelistet. Dort gibt es diese selbstverständlich - nicht jedoch unter iOS.

himitsu 24. Okt 2016 10:52

AW: TPath.GetIrgendwas
 
Darum "frage" ich hier ja nochmal nach, hab ja kein iOS/OSX, aber bei den meisten anderen Pfaden sah es so aus, als ob die Grundstruktur gleich sei.

Delphi-Referenz durchsuchenIOUtils.TPath.GetPublicPath
NSSharedPublicDirectory wird unabhängig vom Simulator immer für iOS aufgerufen.
Ein halbwegs gesunder Menschenverstand hätte mich jetzt vermuten lassen, dass es intelligenter wäre, wenn der Simmulator "ähnlich" funktioniert, wie das zu simulierende Gerät.
Es wäre doch zu blöd, wenn man das Programm testet, es da läuft und dann auf den Zielgerät nicht mehr?

Aber darum auch der Testcode, so dass jemand anderes auch mal auf dem iOS-Simulator und einem der vielen iOS-Geräte nachsehen könnte, was es nun wirklich gibt.
Mein altes Delphi mag auch kein Andriod 5 und das jetzt, wo mein neues Tablet endlich aus der Reparatur zurück ist. :cry:


Zitat:

Zitat von Rollo62 (Beitrag 1351813)
Das fehlt aber unten, ist das ein Typo, und du meinst GetSharedDownloadsPath ?

In der oberen Liste sind nur alle mir bisher aufgefallenen Verzeichnisse drin und jeweils eine oder zwei TPath-Methoden, welche diesen Pfad zurück gibt.
Also die wichtigste Methode, anhand des Namen der Funktion und des Verzeichnisses, wenn sie funktionell übereinstimmen.
Es kann da auch noch andere Methoden geben und es gibt auch noch Funktionen (z.B. Delphi-Referenz durchsuchenSysUtils.GetHomePath)


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:50 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-2025 by Thomas Breitkreuz