Entwickler-Ecke

Windows API - ...Typ-Bezeichnung einer Datei erhalten (nicht Erweiterung)


Popov - Fr 30.01.04 19:32
Titel: ...Typ-Bezeichnung einer Datei erhalten (nicht Erweiterung)
Hier handelt es sich nicht und die Dateierweiterung die zurückgegeben wird (das geht mit ExtractFileExt), sondern um den Typ allgemein. Zum Beispiel ist der Programme-Ordner vom Typ her Dateiordner. Config.sys ist eine Systemdatei. Autoexec.bat ist eine Stapelverarbeitungsdatei für MS-DOS. Dieser Tipp zeigt also um was für einen Typ sich bei der Datei handelt; so wie es auch der Explorer macht.

Die Funktion erwartet ein Parameter:

Ergebnis ist ein String mit der Typbezeichnung. Gibt es keinen registrierten Typ, dann wird eine allgemeine Bezeichnung zurückgegeben (z.B. "Datei BMK" bei der Erweiterung "BMK" ). Wird die Datei nicht gefunden oder es gibt sonnst ein Fehler, dann wird ein Nullstring (#0) zurückgeliefert.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
uses
  ShellApi;

function GetFileTypeName(const FileName: String): String;
var
  sfi: TSHFILEINFO;
begin
  if SHGetFileInfo(PChar(FileName), 0, sfi, SizeOf(sfi), SHGFI_TYPENAME) <> 0
    then Result := sfi.szTypeName
    else Result := #0;
end;


Beispiele:

Hier wird ein Ordner als Dateiname angegeben. Es sollte "Dateiordner" zurückkommen:


Delphi-Quelltext
1:
2:
3:
4:
procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage(GetFileTypeName('c:\Programme')); 
end;


Hier wird die AutoExec.bat angegeben. Es sollte "Stapelverarbeitungsdatei für MS-DOS" zurückkommen:


Delphi-Quelltext
1:
2:
3:
4:
procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage(GetFileTypeName('c:\autoexec.bat')); 
end;


Als letztes noch die System.1st (sie ist versteckt). Da die "1st" Erweiterung nicht registriert ist, kommt die allgemene Typenbezeichnung "Datei 1st" zurück:


Delphi-Quelltext
1:
2:
3:
4:
procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage(GetFileTypeName('c:\System.st')); 
end;