Vielen Dank, Sir Rufo.
Ich hatte gesucht, aber nicht die richtigen Suchbegriffe gefunden. Hast du sowas im Kopf?
Der Link hat mir sehr weitergeholfen, aber bei ShGetFileInfo() bin ich natürlich auch auf die beiden dort ungelösten Probleme gestoßen, nämlich dass die Funktion nicht den vollen Pfad, sondern nur das letzte Verzeichnis zurückgibt, und dass es keinen Weg zurück gibt (deutsch -> englisch).
Das erste Problem habe ich gelöst, indem ich jedes einzelne Teilverzeichnis des Pfades durch die Funktion jage:
Delphi-Quellcode:
uses ShellApi;
function ErmittleDtVerznamen(Verzname:string):string;
var FileInfo: SHFILEINFO; p1,p2:integer; Verz,Teilverz:string;
const Tz = '\';
begin
Result := '';
If DirectoryExists(Verzname) then begin
Verz := IncludeTrailingBackSlash(Verzname);
Result := Copy(Verzname,1,3);
p1 := 3;
p2 := PosEx(Tz,Verz,p1 + 1);
While p2 > 0 do begin
Teilverz := IncludeTrailingBackSlash(Copy(Verz,1,p2 - 1));
If SHGetFileInfo(PChar(Teilverz), 0, FileInfo,SizeOf(FileInfo),SHGFI_DISPLAYNAME) <> 0
then Result := Result + IncludeTrailingBackSlash(FileInfo.szDisplayName)
else exit;
p1 := p2 + 1;
p2 := PosEx(Tz,Verz,p1 + 1);
end;
end;
end;
Da wird unseren Experten noch einiges an Verbesserungspotenzial einfallen
, aber es funktioniert und vielleicht hilft es ja jemandem.
Das zweite Problem habe ich nur proprietär gelöst, indem ich eine Liste aller eingedeutschten Namen anlege, was unter meinen Gegebenheiten lückenlos möglich ist.