![]() |
"User" Dokumente Verzeichnis finden
Hallo Delphi-PRAXIS,
kann mir jemand sagen wie man zuverlässig das C:\Users\"User"\Dokumente Verzeichnis mit einer funktion finden kann? FG Dunkelbunt |
AW: "User" Dokumente Verzeichnis finden
Über
![]()
Delphi-Quellcode:
{ ************************************************************ }
function GetSpecialPath (AFolder: Integer): String; { ************************************************************ } { ************************************************************ } function PidlToPath (IdList: PItemIdList): String; { ************************************************************ } begin SetLength (Result, MAX_PATH); if SHGetPathFromIdList (IdList, PChar (Result)) then begin SetLength (Result, StrLen (PChar (Result))); Result := IncludeTrailingPathDelimiter (Result); end else Result := ''; end; // PIdlToPath { ************************************************************ } function PidlFree (var IdList: PItemIdList): Boolean; { ************************************************************ } var Malloc : IMalloc; begin Result := False; if IdList = nil then Result := True else begin if Succeeded (SHGetMalloc (Malloc)) and (Malloc.DidAlloc (IdList) > 0) then begin Malloc.Free (IdList); IdList := nil; Result := True; end; end; end; // PidlFree var FolderPidl : PItemIdList; begin Result := ''; try if Succeeded (SHGetSpecialFolderLocation (0, AFolder, FolderPidl)) then begin Result := PidlToPath (FolderPidl); PidlFree (FolderPidl); end; except Result := ''; end; end; // GetSpecialPath User_Documents_Path := GetSpecialPath(CSIDL_COMMON_DOCUMENTS); |
AW: "User" Dokumente Verzeichnis finden
Code:
Unit ShlObj.pas
function GetSpecialFolder (aFolder: Integer): String; // Unit ShlObj.pas
pIdL: PItemIDList; Path: Array [0..Max_Path] Of Char; Allocator: IMalloc; begin // ItemIdList für den Ordner holen SHGetSpecialFolderLocation (0, aFolder, pIdL); // ItemIdList in String umwandeln lassen SHGetPathFromIDList (pIDL, Path); // Speicher wieder freigeben if Succeeded (SHGetMalloc (Allocator)) then begin Allocator.Free (pIdL); {$IFDEF VER100} Allocator.Release; {$ENDIF} end; Result := Path; end; GetSpecialFolder(CSIDL_[irgend was]); hab jetzt leider nicht die zutreffende Bezeichnung parat, aber als Schleife (i := 0 to 255) mit GetSpecialFolder(i) sollte sich das rausfinden lassen. . . . ups, da war jemand schneller |
AW: "User" Dokumente Verzeichnis finden
guckst Du hier :-)
![]() |
AW: "User" Dokumente Verzeichnis finden
Ah, danke.
Ich schau mal ob's geht. @ nuclearping Danke, es funktioniert. Es führt mich aber zu C:\Users\Public\Documents. Mit CSIDL_MYDOCUMENTS Kommt man zu C:\Users/User\Documents. |
AW: "User" Dokumente Verzeichnis finden
|
AW: "User" Dokumente Verzeichnis finden
Auch wenn die Frage scheinbar schon beantwortet ist: Ab Vista sollte nur noch die Funktion
![]() ![]() [EDIT] Die passende Konstante lautet in deinem Fall übrigens FOLDERID_Documents. |
AW: "User" Dokumente Verzeichnis finden
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:08 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