为描述和图标调用 SHGetFileInfo。根据经验,我可以告诉您访问和搜索注册表很慢。我不知道到底有多慢。但是,我不得不缓存结果以避免访问注册表。此外,可靠地检索所有文件类型的文件信息并不像您在第 1 项中描述的那么简单。让 SHGetFileInfo 可靠地为您完成工作并缓存结果以提高性能,如下所示的文件类型名称。
此外,请参阅如何使用 SHGetFileInfo 函数来获取与 Visual Basic .NET 中的文件相关联的图标,网址为http://support.microsoft.com/kb/319340,以轻松获取图标。
Private Shared _descriptions As New Dictionary(Of String, String)
Private Shared Function CacheDocumentDescription(ByVal extension As String, ByVal description As String) As String
_descriptions.Add(extension, description)
DumpCacheDocumentItem(extension, description, "added")
Return description
End Function
<Conditional("DbCacheDocument")> _
Private Shared Sub DumpCacheDocumentItem(ByVal extension As String, ByVal description As String, ByVal category As String)
Debug.WriteLine(extension & ", " & description, category)
End Sub
Public Shared Function GetTypeName(ByVal fullPath As String) As String
Dim sExt As String = System.IO.Path.GetExtension(fullPath)
If Len(sExt) = 0 Then
Return "File"
End If
If _descriptions.ContainsKey(sExt) Then
'return cached value
Return _descriptions.Item(sExt)
End If
Dim sDocDescription As String = Missico.Shell.ShellFileInfo.TypeName(fullPath)
Return CacheDocumentDescription(sExt, sDocDescription)
End Function