![]() |
Welche ist die aktuell gültige API um Systempfade zu bekomme?
![]() Zitat:
![]() Zitat:
Könnte es ![]() Da steht noch nicht "Deprecated" ... |
AW: Welche ist die aktuell gültige API um Systempfade zu bekomme?
Ja, Known Folders sind der aktuelle Weg. Hier steht meines Wissens auch noch keine Änderung an.
|
AW: Welche ist die aktuell gültige API um Systempfade zu bekomme?
Alternative: TPath, z.b. TPath.GetDocumentsPath für Windows wird dann im Quellcode von System.IOUtils SHGetFolderPath aufgerufen.
|
AW: Welche ist die aktuell gültige API um Systempfade zu bekomme?
Zitat:
![]() Zitat:
|
AW: Welche ist die aktuell gültige API um Systempfade zu bekomme?
Es kommt darauf an, welche Betriebssysteme du noch unterstützen musst.
Ist noch etwas vor Windows Vista dabei, dann musst du bei
Delphi-Quellcode:
bleiben.
SHGetFolderPath
Ab Windows Vista und neuer kannst du komplett auf
Delphi-Quellcode:
setzen.
SHGetKnownFolderPath
|
AW: Welche ist die aktuell gültige API um Systempfade zu bekomme?
|
AW: Welche ist die aktuell gültige API um Systempfade zu bekomme?
Was spricht denn gegen die TPath.GetXXXX Methoden?
Sind in IOUtils drin und funktionieren soweit es diese Pfade jeweils gibt auch Cross Plattform. Im jeweiligen Hilfetext steht auch jeweis drin, auf welches Verzeichnis unter welcher Plattform das normalerweise verweist. Also wozu das Rad neu erfinden bzw. zu plattform spezifisch in deinem Code werden? |
AW: Welche ist die aktuell gültige API um Systempfade zu bekomme?
Würde ich gerne machen.
Ich brauch (in zwei Fällen) CSIDL_PROFILE bzw. FOLDERID_Profile. D.h. der "Rootpfad" des Profiles (i.d.R. c:\Users\<UserName>) Und das ist (soweit ich bei TPath sehe) nicht abgebildet. Also brauch ich eine eigene Methode mit der ich nur mit Delphi-Strings arbeite und den API-Aufruf kapsele. Und ja. Ich weiß das man normalerweise die Anwendungsdaten nicht direkt im Profil-Hauptverzeichnis (bzw. direkt dort ein Verzeichnis) ablegt. Wurde aber gemacht (ähnlich wie es z.B. IDEA oder Adobe Cloud) |
AW: Welche ist die aktuell gültige API um Systempfade zu bekomme?
Ich lasse mich da gerne von .Net inspirieren*
![]() ![]() und dann käme ich z.B. auf
Delphi-Quellcode:
Und der Aufruf ist sehr sprechend:
interface
{$SCOPEDENUMS ON} const CSIDL_FLAG_CREATE = $8000; CSIDL_FLAG_DONT_VERIFY = $4000; CSIDL_ADMINTOOLS = $0030; CSIDL_PROFILE = $0028; type TEnvironment = record public type TSpecialFolder = ( // AdminTools = CSIDL_ADMINTOOLS, // UserProfile = CSIDL_PROFILE); TSpecialFolderOption = ( // None = 0, // Create = CSIDL_FLAG_CREATE, // DoNotVerify = CSIDL_FLAG_DONT_VERIFY); private class function InternalGetFolder(AFolder: TSpecialFolder; AOption: TSpecialFolderOption): string; static; public class function GetFolderPath(AFolder: TSpecialFolder): string; overload; static; class function GetFolderPath(AFolder: TSpecialFolder; AOption: TSpecialFolderOption): string; overload; static; end; implementation uses Winapi.Windows, Winapi.SHFolder; { TEnvironment } class function TEnvironment.GetFolderPath(AFolder: TSpecialFolder; AOption: TSpecialFolderOption): string; begin Result := InternalGetFolder(AFolder, AOption); end; class function TEnvironment.InternalGetFolder(AFolder: TSpecialFolder; AOption: TSpecialFolderOption): string; var LStr: array [0 .. MAX_PATH] of Char; begin SetLastError(ERROR_SUCCESS); if SHGetFolderPath(0, Integer(AFolder) or Integer(AOption), 0, 0, @LStr) = S_OK then Result := LStr; end; class function TEnvironment.GetFolderPath(AFolder: TSpecialFolder): string; begin Result := InternalGetFolder(AFolder, TSpecialFolderOption.None); end;
Delphi-Quellcode:
.
TEnvironment.GetFolderPath(TEnvironment.TSpecialFolder.UserProfile);
Und um auf wirklich alle SpecialFolder zuzugreifen muss man nur etwas Fleißarbeit investieren und
Delphi-Quellcode:
komplettieren.
TEnvironment.TSpecialFolder
* Was ich auch nicht verwerflich finden, gerade weil Emba das auch sehr gerne macht, allerdings hat man das Gefühl, dass die dabei meistens schielen. |
AW: Welche ist die aktuell gültige API um Systempfade zu bekomme?
Keine Ahnung was du uns mitteilen willst.
Aber warum das Rad neu erfinden es hat sich bzgl. der Frage in der API auch und besonders in Win10 nichts geändert. Die Header bzw. der Aufruf von SHGetKnownFolderPath ist bestimmt schon seit D2009 seitens Emba in Delphi integriert und tut seine Arbeit. just my 2 Cent. Es ist nicht von Nöten dafür extra eine eigene Classe zu entwerfen. Aber wie du willst. gruss |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:03 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