![]() |
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: ![]() Zitat:
Zitat:
(in den mobilen Geräten gibt es meistens nur einen Benutzer, aber dafür hat jede Anwendung quasi ihren eigenen Benutzer, entsprechend der AppID) |
AW: TPatn.GetIrgendwas
|
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 |
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. |
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:
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: |
AW: TPatn.GetIrgendwas
Zitat:
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! |
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. |
AW: TPath.GetIrgendwas
Zitat:
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? |
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. |
AW: TPath.GetIrgendwas
Zitat:
Mavarik |
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.
|
AW: TPath.GetIrgendwas
Zitat:
|
AW: TPath.GetIrgendwas
SharedPictures ist unter Android ohne AppID, aber SharedDocuments dann doch wieder, also nix mit Shared.
Zitat:
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) |
AW: TPath.GetIrgendwas
Zitat:
Oder liege ich hier komplett falsch? |
AW: TPath.GetIrgendwas
Zum Topic: Immer die englische Hilfe lesen. Die Übersetzungen sind grauslig.
Sherlock |
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 |
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. |
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. ![]() ![]() ![]()
Also jeweils OS, die Hauptunktion, welche drauf zeigt, und dann noch der Pfad, alles sortiert nach Pfaden.
Code:
Und 'ne kleine Testfunktion, welche Nachfolgendes anzeigt.
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:
Delphi-Quellcode:
Windows 7:
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;
Code:
Android 4:
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
Code:
Android 5 konnte ich nicht gucken, da meine Delphi-Programme da nicht mehr laufen.
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 Application does not support this System :cry: und OSX/iOS hab'sch net. |
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 |
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. |
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:
Zitat:
|
AW: TPath.GetIrgendwas
Zitat:
![]() Alles was nicht Sandboxed ist, k.A. was das für Programme sind, kann demnach eh auf viel mehr zugreifen. |
AW: TPath.GetIrgendwas
Zitat:
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. |
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.
![]() 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:
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. ![]() |
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