C# 从文件路径中获取文件类型名称

希特什·堪萨加拉

我已经实现了从文件路径中获取文件类型名称所需的所有代码,它运行成功,但它返回减去的类型名称,例如,如果.pdb 或 .pdf文件的文件路径,那么它将返回“obe Acrobat Document”而不是“Adobe Acrobat文档”

我用过shell32.dll。我不明白发生了什么,请帮我摆脱它。

源代码:

[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Auto)]
    internal struct SHFILEINFO
    {            
        public IntPtr hIcon;            
        public IntPtr iIcon;            
        public uint dwAttributes;            
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]
        public string szDisplayName;            
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 80)]
        public string szTypeName;
    };

internal class Win32
{            
    public const uint FILE_ATTRIBUTE_NORMAL = 0x80;            
    public const uint FILE_ATTRIBUTE_DIRECTORY = 0x10;            
    public const uint SHGFI_TYPENAME = 0x000000400;            
    public const uint SHGFI_USEFILEATTRIBUTES = 0x000000010;            
    internal const uint SHGFI_SYSICONINDEX = 0x000004000;            
    internal const int ILD_TRANSPARENT = 0x1;            
    internal const uint SHGFI_ICON = 0x100;            
    internal const uint SHGFI_LARGEICON = 0x0; 
    internal const uint SHGFI_SMALLICON = 0x1; 

    [DllImport("shell32.dll", CharSet=CharSet.Unicode)]
    internal static extern IntPtr SHGetFileInfo
        (
            string pszPath, 
            uint dwFileAttributes, 
            ref SHFILEINFO psfi, 
            uint cbSizeFileInfo, 
            uint uFlags
        );

    [DllImport("shell32.dll", CharSet = CharSet.Auto)]
    internal static extern int ExtractIconEx
        (
            string stExeFileName, 
            int nIconIndex, 
            ref IntPtr phiconLarge, 
            ref IntPtr phiconSmall, 
            int nIcons
        );

    [DllImport("comctl32.dll", SetLastError = true)]
    internal static extern IntPtr ImageList_GetIcon
        (
            IntPtr himl, 
            int i, 
            int flags
        );

    [DllImport("user32.dll")]
    internal static extern bool DestroyIcon(IntPtr hIcon);
}

internal static string GetFileType(string filename)
{
    SHFILEINFO shinfo = new SHFILEINFO();
    Win32.SHGetFileInfo
        (
                filename,
                Win32.FILE_ATTRIBUTE_NORMAL,
                ref shinfo, (uint)Marshal.SizeOf(shinfo),
                Win32.SHGFI_TYPENAME |
                Win32.SHGFI_USEFILEATTRIBUTES
            );

    return shinfo.szTypeName; //It return "obe Acrobat Document" Instead of "Adobe Acrobat Document"
}

这是返回文件类型名称的屏幕截图

希特什·堪萨加拉

C++ 结构体中的 iIcon 字段的类型是 int。所以,我只需要设置 iIcon int 的类型,而不是 IntPtr。IntPtr 根据系统平台工作。我只是将 int 类型设置为 iIcon 之类的,

[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Auto)]
internal struct SHFILEINFO
{            
    public IntPtr hIcon;            
    public int iIcon;            
    public uint dwAttributes;            
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]
    public string szDisplayName;            
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 80)]
    public string szTypeName;
};

它工作正常......

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在C#中获取邮件文件的大小,类型,名称

来自分类Dev

在C#中打开时如何获取关联文件类型的文件路径

来自分类Dev

在递归文件遍历C中获取完整的文件路径

来自分类Dev

C ++中的文件路径

来自分类Dev

获取文件路径C#

来自分类Dev

如何从C中的完整路径获取文件目录

来自分类Dev

C#在图像框中获取图像的文件路径

来自分类Dev

如何从C中的完整路径获取文件目录

来自分类Dev

在UNC路径中获取文件的parentDirectory C#2010

来自分类Dev

如何在C中获取文件系统名称和大小?

来自分类Dev

如何从C#项目文件中获取DLL或EXE名称?

来自分类Dev

C文件中的头文件路径

来自分类Dev

C#MVC获取完整的文件路径

来自分类Dev

获取资源的文件路径(Objective-C)

来自分类Dev

从 C# 中的 DFS 路径获取 DFS 文件夹目标(本地服务器路径)

来自分类Dev

在c#中获取目录中的文件名(无需获取路径)

来自分类Dev

C#:在.exe(图标)上拖放文件并获取文件路径

来自分类Dev

android ndk包装的c ++文件获取android系统文件路径

来自分类Dev

C#:在.exe(图标)上拖放文件并获取文件路径

来自分类Dev

在 C# 中获取文件名和文件类型作为单独的字符串

来自分类Dev

如何在C#中的队列中获取打印作业的文件路径

来自分类Dev

从C ++文件中获取输入

来自分类Dev

文件路径中的C#非法字符

来自分类Dev

文件路径中的C#非法字符

来自分类Dev

用户在C中输入的文件路径

来自分类Dev

访问目标 C 中的本地文件路径

来自分类Dev

获取一段时间内在 C++ 中创建的文件路径列表

来自分类Dev

如何以可移植的方式删除 C++ 中名称为 wchar_t 类型的文件?

来自分类Dev

从具有路径目标c的所选文件夹中获取大小大于100MB的文件的列表

Related 相关文章

  1. 1

    在C#中获取邮件文件的大小,类型,名称

  2. 2

    在C#中打开时如何获取关联文件类型的文件路径

  3. 3

    在递归文件遍历C中获取完整的文件路径

  4. 4

    C ++中的文件路径

  5. 5

    获取文件路径C#

  6. 6

    如何从C中的完整路径获取文件目录

  7. 7

    C#在图像框中获取图像的文件路径

  8. 8

    如何从C中的完整路径获取文件目录

  9. 9

    在UNC路径中获取文件的parentDirectory C#2010

  10. 10

    如何在C中获取文件系统名称和大小?

  11. 11

    如何从C#项目文件中获取DLL或EXE名称?

  12. 12

    C文件中的头文件路径

  13. 13

    C#MVC获取完整的文件路径

  14. 14

    获取资源的文件路径(Objective-C)

  15. 15

    从 C# 中的 DFS 路径获取 DFS 文件夹目标(本地服务器路径)

  16. 16

    在c#中获取目录中的文件名(无需获取路径)

  17. 17

    C#:在.exe(图标)上拖放文件并获取文件路径

  18. 18

    android ndk包装的c ++文件获取android系统文件路径

  19. 19

    C#:在.exe(图标)上拖放文件并获取文件路径

  20. 20

    在 C# 中获取文件名和文件类型作为单独的字符串

  21. 21

    如何在C#中的队列中获取打印作业的文件路径

  22. 22

    从C ++文件中获取输入

  23. 23

    文件路径中的C#非法字符

  24. 24

    文件路径中的C#非法字符

  25. 25

    用户在C中输入的文件路径

  26. 26

    访问目标 C 中的本地文件路径

  27. 27

    获取一段时间内在 C++ 中创建的文件路径列表

  28. 28

    如何以可移植的方式删除 C++ 中名称为 wchar_t 类型的文件?

  29. 29

    从具有路径目标c的所选文件夹中获取大小大于100MB的文件的列表

热门标签

归档