AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

TPath.GetDownloadsPath

Ein Thema von AndyDF · begonnen am 26. Sep 2016 · letzter Beitrag vom 26. Sep 2016
Antwort Antwort
AndyDF

Registriert seit: 6. Sep 2006
Ort: Allgäu
99 Beiträge
 
Delphi 10.4 Sydney
 
#1

TPath.GetDownloadsPath

  Alt 26. Sep 2016, 16:18
Delphi-Version: 10 Seattle
Hallo,

jetzt gibt es ja seit einigen Delphi Version in IOUtils TPath. Über diese Klasse kann ich mir verschiedene Pfade sehr komfortabel ermitteln.
Jetzt bräuchte ich gerade das default Download-Verzeichnis des Benutzers und habe spontan mal
Code:
TPath.GetDownloadsPath
ausprobiert. Erwartet hätte ich:
Code:
C:\Benutzer\<Benutzername>\Downloads
erhalten habe ich aber:
Code:
C:\Benutzer\<Benutzername>\AppData\Local
So steht es ja auch in der Doku. Also die Funktion liefert das "richtige" Ergebnis.


Verstehe ich da was falsch? Oder ist das "C:\Benutzer\<Benutzername>\AppData\Local" per Definition für Downloads gedacht? Mir geht es in meinem Fall nur um Windows.
Andreas Blenk
  Mit Zitat antworten Zitat
Fritzew

Registriert seit: 18. Nov 2015
Ort: Kehl
678 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: TPath.GetDownloadsPath

  Alt 26. Sep 2016, 17:07
Das ist eine "Unschönheit" in Delphi.
Bin mir nicht ganz sicher aber als die IoUtils eingeführt wurden war glaube ich
XP noch auf der Liste der unterstützten OS.

Erst ab Vista gibt es die function SHGetKnownFolderPath mit der man auch das Downloadverzeichnis abfragen kann.
Deshalb wurde in den IoUtils SHGetFolderPath benutzt.
Die arbeitet mit CSIDL_xxxxx Konstanten und es gibt keine für den Downloadordner.

Müsste von Embarcadero wohl mal überarbeitet werden.

Jetzt hilft wohl nur die
SHGetKnownFolderPath selbst zu kapseln, oder frech das %Userprofile%\Downloads zu benutzen
Fritz Westermann
  Mit Zitat antworten Zitat
t.roller
(Gast)

n/a Beiträge
 
#3

AW: TPath.GetDownloadsPath

  Alt 26. Sep 2016, 17:28
Siehe HIER.

Suche in der Registry
[HKEY_CURRENT_USER\Software\Microsoft\Windows\Curre ntVersion\Explorer\Shell Folders]
nach {374DE290-123F-4565-9164-39C4925E467B}.
In der folgenden Tabelle werden bekannte Ordner von Windows Vista und folgende Versionen und deren zugeordnete Guid aufgeführt.

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Windows\Curre ntVersion\Explorer\Shell Folders]
"!Do not use this registry key"="Use the SHGetFolderPath or SHGetKnownFolderPath function instead"
"AppData"="C:\\Users\\TheUser\\AppData\\Roamin g"
"Local AppData"="C:\\Users\\TheUser\\AppData\\Local"
"My Video"="C:\\Users\\TheUser\\Videos"
"{1B3EA5DC-B587-4786-B4EF-BD1DC332AEAE}"="C:\\Users\\TheUser\\AppData\\Roami ng\\Microsoft\\Windows\\Libraries"
"My Pictures"="C:\\Users\\TheUser\\Pictures"
"Desktop"="C:\\Users\\TheUser\\Desktop"
"History"="C:\\Users\\TheUser\\AppData\\Local\\Mic rosoft\\Windows\\History"
"NetHood"="C:\\Users\\TheUser\\AppData\\Roaming\\M icrosoft\\Windows\\Network Shortcuts"
"{56784854-C6CB-462B-8169-88E350ACB882}"="C:\\Users\\TheUser\\Contacts"
"{00BCFC5A-ED94-4E48-96A1-3F6217F21990}"="C:\\Users\\TheUser\\AppData\\Local \\Microsoft\\Windows\\RoamingTiles"
"Cookies"="C:\\Users\\TheUser\\AppData\\Local\\Mic rosoft\\Windows\\INetCookies"
"Favorites"="C:\\Users\\TheUser\\Favorites"
"SendTo"="C:\\Users\\TheUser\\AppData\\Roaming\\Mi crosoft\\Windows\\SendTo"
"Start Menu"="C:\\Users\\TheUser\\AppData\\Roaming\\Micro soft\\Windows\\Start Menu"
"My Music"="C:\\Users\\TheUser\\Music"
"Programs"="C:\\Users\\TheUser\\AppData\\Roaming\\ Microsoft\\Windows\\Start Menu\\Programs"
"Recent"="C:\\Users\\TheUser\\AppData\\Roaming\\Mi crosoft\\Windows\\Recent"
"CD Burning"="C:\\Users\\TheUser\\AppData\\Local\\Micr osoft\\Windows\\Burn\\Burn"
"PrintHood"="C:\\Users\\TheUser\\AppData\\Roaming\ \Microsoft\\Windows\\Printer Shortcuts"
"{7D1D3A04-DEBB-4115-95CF-2F29DA2920DA}"="C:\\Users\\TheUser\\Searches"
"{374DE290-123F-4565-9164-39C4925E467B}"="C:\\Users\\TheUser\\Downloads"
"{A520A1A4-1780-4FF6-BD18-167343C5AF16}"="C:\\Users\\TheUser\\AppData\\Local Low"
"Startup"="C:\\Users\\TheUser\\AppData\\Roaming\\M icrosoft\\Windows\\Start Menu\\Programs\\Startup"
"Administrative Tools"="C:\\Users\\TheUser\\AppData\\Roaming\\Micr osoft\\Windows\\Start Menu\\Programs\\Administrative Tools"
"Personal"="C:\\Users\\TheUser\\Documents"
"{BFB9D5E0-C6A9-404C-B2B2-AE6DB6AF4968}"="C:\\Users\\TheUser\\Links"
"Cache"="C:\\Users\\TheUser\\AppData\\Local\\Micro soft\\Windows\\INetCache"
"Templates"="C:\\Users\\TheUser\\AppData\\Roaming\ \Microsoft\\Windows\\Templates"
"{4C5C32FF-BB9D-43B0-B5B4-2D72E54EAAA4}"="C:\\Users\\TheUser\\Saved Games"
"Fonts"="C:\\Windows\\Fonts"

Geändert von t.roller (26. Sep 2016 um 17:53 Uhr)
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.610 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: TPath.GetDownloadsPath

  Alt 26. Sep 2016, 17:31
Suche in der Registry nach {374DE290-123F-4565-9164-39C4925E467B}.
In der folgenden Tabelle werden bekannte Ordner von Windows Vista und folgende Versionen und deren zugeordnete Guid aufgeführt.
Nichts anderes macht SHGetKnownFolderPath soweit ich weiß. Vorteil dabei ist, dass man sich das manuelle Suchen spart und bereits eine Fehlerbehandlung eingebaut ist die man nur noch abfragen muss.
  Mit Zitat antworten Zitat
t.roller
(Gast)

n/a Beiträge
 
#5

AW: TPath.GetDownloadsPath

  Alt 26. Sep 2016, 17:40
Verstehe ich da was falsch? Oder ist das "C:\Benutzer\<Benutzername>\AppData\Local" per Definition für Downloads gedacht? Mir geht es in meinem Fall nur um Windows.
Wenn wir die gleichen Drogen nehmen wie die Programmierer von E., dann verstehen wir es auch!

Kann man in XE7.System.IOUtils.pas sehen, dass der P. nicht ganz nüchtern war:
Delphi-Quellcode:
class function TPath.GetDownloadsPath: string;
{$IFDEF MSWINDOWS}
var
  LStr: array[0 .. MAX_PATH] of Char;
begin
  SetLastError(ERROR_SUCCESS);
  if SHGetFolderPath(0,CSIDL_LOCAL_APPDATA, 0, 0, @LStr) = S_OK then
    Result := LStr;
end;
Das Einfachste ist doch folgende Zeile:
Caption:= GetEnvironmentVariable('USERPROFILE')+'\Downloads';
Aufruf des Explorers mit Downloads-Verzeichnis:
Delphi-Quellcode:
procedure TForm1.ButtonClick(Sender: TObject); // uses ShellApi
var FN: String;
begin
FN:= 'shell:::{374DE290-123F-4565-9164-39C4925E467B} ';
ShellExecute(0,nil,PChar('explorer.exe'),PChar(FN),'',SW_SHOWNORMAL);
end;

Geändert von t.roller (27. Sep 2016 um 09:00 Uhr)
  Mit Zitat antworten Zitat
ringli

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

AW: TPath.GetDownloadsPath

  Alt 26. Sep 2016, 17:52
Ich verweise mal auf die CodeLib
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 10:27 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