VB-Homepage Tipp 406

Dateityp einer Datei ermitteln (Explorerfunktion)

Also wenn Sie mich fragen, ich mag den Explorer nicht, er hat mir zu viele Macken und zeigt alles und nichts an und läßt manches einfach weg.

Kleine "Bug" am Rande, mappen Sie sich mal ein lokales Laufwerk eines anderen Computers im Netz unter WinNT (bei 95/98 sicher auch) und gehen Sie in den Papierkorb (Recycler) und Sie werden staunen, das der fremde User Ihre Dateien im Papierkorb hat. Aber wenn die Schrecksekunde vorbei ist, werden Sie erkennen, das der Explorer trotz Zugriff auf ein fremdes Verzeichnis, den Inhalt Ihres Papierkorbs anzeigt.

Vielleicht verstehen Sie jetzt ein wenig, warum ich den Explorer nicht mag.
Aber es gibt natürlich auch Funktionen, die hat er eben drauf und die kann man gut für eigene Programme verwenden. Eine Funktion davon wollen wir hier etwas näher beleuchten.
Betrachten Sie die Detailanzeige im Explorer, so werden Sie sehen, daß in der Spalte Typ zu jeder Datei eine Beschreibung steht. Wenn auch Sie diese Information für Ihr Programm benötigen, dann ist nachfolgender Tipp der Ihre.

Allgemein/Deklarationen
Const MAX_PATH = 260
Const SHGFI_TYPENAME = &H400&

Private Type SHFILEINFO
   hIcon As Long
   iIcon As Long
   dwAttributes As Long
   szDisplayName As String * MAX_PATH
   szTypeName As String * 80
End Type

Private Declare Function SHGetFileInfo Lib "Shell32" Alias "SHGetFileInfoA" ( _
ByVal pszPath As Any, _
ByVal dwFileAttributes As Long, _
psfi As SHFILEINFO, _
ByVal cbFileInfo As Long, _
ByVal uFlags As Long) _
As Long

'Abschneiden der Nullzeichen
Allgemein/GetStrFromBuffer
Function GetStrFromBuffer(szStr As String) As String
If InStr(szStr, vbNullChar) Then
   GetStrFromBuffer = Left$(szStr, InStr(szStr, vbNullChar) - 1)
Else
   GetStrFromBuffer = szStr
End If
End Function

Allgemein/GetTypeName
Private Function GetTypeName(sFilePath As String)
Dim shfi As SHFILEINFO

If SHGetFileInfo(ByVal sFilePath, 0&, shfi, Len(shfi), SHGFI_TYPENAME) Then
If InStr(shfi.szTypeName, vbNullChar) > 1 Then
GetTypeName = GetStrFromBuffer(shfi.szTypeName)
Else
GetTypeName = "<keinem Dateityp zugeordnet>"
End If
End If

End Function

Funktionsaufruf
MsgBox GetTypeName("C:\command.com")

In unserem Beispiel wird dem Befehl der Name der zu prüfenden Datei übergeben und das Ergebnis in einer Messagebox ausgegeben.

Tipp-Download

Quelle :

Zurück zur Übersichtsseite