AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi "User" Dokumente Verzeichnis finden
Thema durchsuchen
Ansicht
Themen-Optionen

"User" Dokumente Verzeichnis finden

Ein Thema von Dunkelbunt27 · begonnen am 11. Mai 2011 · letzter Beitrag vom 12. Mai 2011
Antwort Antwort
Benutzerbild von Dunkelbunt27
Dunkelbunt27

Registriert seit: 10. Aug 2010
232 Beiträge
 
Delphi XE Professional
 
#1

"User" Dokumente Verzeichnis finden

  Alt 11. Mai 2011, 18:16
Hallo Delphi-PRAXIS,

kann mir jemand sagen wie man zuverlässig das C:\Users\"User"\Dokumente Verzeichnis mit einer funktion finden kann?

FG Dunkelbunt
FG Dunkelbunt
"Wer zuletzt lacht hat den höchsten Ping"
  Mit Zitat antworten Zitat
nuclearping

Registriert seit: 7. Jun 2008
708 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

AW: "User" Dokumente Verzeichnis finden

  Alt 11. Mai 2011, 18:28
Über http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx und SHGetSpecialFolderLocation.

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);
  Mit Zitat antworten Zitat
Benutzerbild von markus5766h
markus5766h

Registriert seit: 5. Mär 2009
Ort: Hamburg
569 Beiträge
 
Delphi XE8 Professional
 
#3

AW: "User" Dokumente Verzeichnis finden

  Alt 11. Mai 2011, 18:30
Code:
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;
Unit ShlObj.pas

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
Markus H.

Geändert von markus5766h (11. Mai 2011 um 18:35 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Der.Kaktus
Der.Kaktus

Registriert seit: 22. Jan 2008
Ort: Erfurt
958 Beiträge
 
Delphi 7 Enterprise
 
#4

AW: "User" Dokumente Verzeichnis finden

  Alt 11. Mai 2011, 18:30
guckst Du hier environment
Gruss Kaki

Repeat Until true=false;
  Mit Zitat antworten Zitat
Benutzerbild von Dunkelbunt27
Dunkelbunt27

Registriert seit: 10. Aug 2010
232 Beiträge
 
Delphi XE Professional
 
#5

AW: "User" Dokumente Verzeichnis finden

  Alt 11. Mai 2011, 18:33
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.
FG Dunkelbunt
"Wer zuletzt lacht hat den höchsten Ping"

Geändert von Dunkelbunt27 (11. Mai 2011 um 18:44 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: "User" Dokumente Verzeichnis finden

  Alt 11. Mai 2011, 20:37
Für den Sorglos-Zugriff gibt es Link: SpecialFolders
oder auch das hier
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
ringli

Registriert seit: 7. Okt 2004
509 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: "User" Dokumente Verzeichnis finden

  Alt 11. Mai 2011, 20:37
Auch wenn die Frage scheinbar schon beantwortet ist: Ab Vista sollte nur noch die Funktion MSDN-Library durchsuchenSHGetKnownFolderPath verwendet werden. SHGetSpecialFolderLocation ist eigentlich nur noch aus Kompatibilitätsgründen vorhanden. Hier habe ich mal eine entsprechende Unit gepostet mit der du die Funktion einfach benutzen kannst.

[EDIT]
Die passende Konstante lautet in deinem Fall übrigens FOLDERID_Documents.

Geändert von ringli (11. Mai 2011 um 20:40 Uhr)
  Mit Zitat antworten Zitat
nuclearping

Registriert seit: 7. Jun 2008
708 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#8

AW: "User" Dokumente Verzeichnis finden

  Alt 12. Mai 2011, 14:55
. . . ups, da war jemand schneller
Trotzdem würde ich deine Version nehmen, da sie um einiges kürzer ist.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:38 Uhr.
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