Entwickler-Ecke

Windows API - ...langen Dateinamen erhalten (nicht langen Pfadnamen)


Popov - Fr 30.01.04 20:21
Titel: ...langen Dateinamen erhalten (nicht langen Pfadnamen)
Hier ein Tipp wie man den langen Dateinamen einer Datei erhällt. Zwar gibt es Tipps wie mal lange Pfadname zurückbekommt, hier aber eine kurze Version nur für Dateinamen. Benötigt wird es immer dann, wenn nur der Dateiname, aber nicht der Pfad interresiert (z.B. Dateinamen in TListView anzeigen).

Noch eine kleine Besonderheit der Funktion: es wird der Dateiname so angezeigt wie es im System vereinbart wurde, d.h. ist im System eingestellt, daß registrierte Dateierweiterungen nicht angezeigt werden sollen, dann wird das auch hier beachtet. So wird z.B. die Datei 'C:\TextDatei.txt', wenn registrierte Dateitypen nicht angezeigt werden, als "TextDatei" angezeigt, sonst "TextDatei.txt". Aber, ein Ordner mit der Bezeichnung "C:\Neuer Ordner.txt" wird immer als "Neuer Ordner.txt" angezeigt, da diese Einstellung nicht für Ordner gilt.

Die Funktion erwartet zwei Parameter:

Das Ergebnis ist der lange Dateiname, wenn Dateiname vorhanden ist, oder Nullstring (#0) wenn keine Datei gefunden wurde:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
uses
  ShellApi;

function GetLongFileName(const FileName: String; RegExt: Boolean): String;
var
  sfi: TSHFILEINFO;
begin
  if SHGetFileInfo(PChar(FileName), 0, sfi, SizeOf(sfi),
    SHGFI_DISPLAYNAME) <> 0 then begin
    Result := sfi.szDisplayName;
    if RegExt then begin
      if CompareText(ExtractFileExt(FileName), ExtractFileExt(Result)) <> 0 then
        Result := Result + ExtractFileExt(FileName);
    end;
  end else Result := #0;
end; {Popov}


Beispiele:

Hier wird aus "C:\EIGENE~1" ein "Eigene Dateien":


Delphi-Quelltext
1:
2:
3:
4:
procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage(GetLongFileName('C:\EIGENE~1', True));  
end;


Aus "C:\AutoExec.bat" wird "AutoExec", wenn eingestellt wurde, daß registrierte Dateitypen im Explorer nicht angezeigt werden sollen:


Delphi-Quelltext
1:
2:
3:
4:
procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage(GetLongFileName('C:\AutoExec.bat', False));  
end;


elysm - Mo 01.03.04 15:14

toller tipp! gibts den auch um lange pfadnamen zu finden? :)