对描述和图标均调用SHGetFileInfo。根据经验,我可以告诉你访问和搜索注册表很慢。我不知道究竟有多慢。 但是,我不得不缓存结果以避免访问注册表。另外,可靠地检索所有文件类型的文件信息并不像您在项目#1中描述的那样简单。让SHGetFileInfo可靠地为您完成工作,并缓存结果以提高性能,如下所示,使用文件的类型名称。
Moreove,看到如何使用的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
+1表示“再次测试测试” – thijs 2009-06-09 06:35:55