Autor Beitrag
Popov
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1655
Erhaltene Danke: 13

WinXP Prof.
Bei Kleinigkeiten D3Pro, bei größeren Sachen D6Pro oder D7
BeitragVerfasst: Fr 30.01.04 20:21 
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:
  • DateiName
  • False, wenn Dateiname so zurückkommen soll wie im System vereinbart wurde, oder True, wenn auf jeden Fall die Erweiterung zurückgegeben werden soll.

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

ausblenden 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":

ausblenden 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:

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

_________________
Popov
elysm
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 25


D6 Enter, D6 Pers, D7 Pro
BeitragVerfasst: Mo 01.03.04 15:14 
toller tipp! gibts den auch um lange pfadnamen zu finden? :)