有几种方法可以获取描述和默认的标给定的扩展(没有完整的路径),e。g为"*.doc"我想要得到的"Microsoft Word文档"和相关标,其中你认为会以最快的速度下列之一:

  1. 搜索注册表中:

    • 在注册表,转到"HKCR.{扩展}",读默认值(我们称它的文件类型)
    • 在"HKCR{filetype}\DefaultIcon",读默认值:这是道路的图标文件(图标或容器的文件,像。exe有一个嵌入的标资源)
    • 如果需要,使用的首选方法的提取的图标的资源出的上述文件。
  2. 呼叫API ShGetFileInfo.我相信这是一个有点缓慢。

  3. 根据抢劫,在这里: 如何获得的图标,并介绍自文件的扩展使用德尔菲?

调IExtractIcon口一个"更加灵活和有效"的选择。但是序列建议是使用IShellFolder接口,然后打电话给GetUIObjectOf获取文件的IExtractIcon接口,然后呼GetIconLocation并提取在它检索标的处理。(但是该方法不能读延长的说明?)

由于速度是非常重要的,因为我需要读的信息对所有的文件类型的系统。

非常感谢你!

有帮助吗?

解决方案

首先:你得到数以百万计的图标?如果你是只让一个或几百个,那么它不会有真正的问题,这是最快?如何缓慢的速度太慢?最好的方式是尝试代码和时间,看看它是否值得担心。

第二:是的速度差别真的有问题吗?使用SHGetFileInfo更有可能工作的每一个操作系统版本将可以兼容然而Microsoft做的事情在未来阅读的登记册可能不起作用,在某些情况下。你将如何测试?

最后,具有重了上述问题,最好的办法是写下10个行代码,这将需要尝试所有三种办法和简单地看看哪一个是最快的。

其他提示

呼叫SHGetFileInfo为的说明和图示。从以往的经验,我可以告诉你,访问和检索注册是缓慢的。我不知道究竟如何缓慢。 , 我得缓的结果,以避免访问登记处。此外,可靠地进行检索文件信息用于所有类型的文件是不简单,因为你描述在项目#1.让SHGetFileInfo为你做工作的可靠和高速缓存的结果,以提高性能,如下所示的文件的类型的名称。

Moreove,请参阅 如何使用SHGetFileInfo功能得到的图标,与相关联文件的视觉基础。净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

我有点晚了该党,但我只是会离开的p/调用。网链接到SHGetFileInfo在这里 http://www.pinvoke.net/default.aspx/shell32/SHGetFileInfo.html

它不会回答这个问题,但这个问题,是我的第一个谷歌的结果时寻找如何获得一个说明文件的扩展。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top