gpt4 book ai didi

c# - 如何获取文件类型名称?

转载 作者:太空狗 更新时间:2023-10-30 00:55:26 25 4
gpt4 key购买 nike

我想在我的 C# 应用程序中获取文件类型的名称,该名称显示在 Windows 的文件属性中...例如 .log 文件的类型为 LOG 文件(.log).batWindows 批处理文件 (.bat)(从我的语言翻译而来,所以可能不准确)。

请问,我在哪里可以找到这些信息?或者如何做到这一点?我找到了Get-Registered-File-Types-and-Their-Associated-Ico文章,其中作者展示了如何获取图标,但没有展示操作系统中显示的文件类型名称。

最佳答案

您必须调用相应的 Shell 函数 SHGetFileInfo ,这是一个原生的 Win32 API。

class NativeMethods
{
private const int FILE_ATTRIBUTE_NORMAL = 0x80;
private const int SHGFI_TYPENAME = 0x400;

[DllImport("shell32.dll", CharSet = CharSet.Unicode)]
private static extern IntPtr SHGetFileInfo(
string pszPath,
int dwFileAttributes,
ref SHFILEINFO shinfo,
uint cbfileInfo,
int uFlags);


[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
private struct SHFILEINFO
{
public SHFILEINFO(bool b)
{
hIcon = IntPtr.Zero;
iIcon = 0;
dwAttributes = 0;
szDisplayName = "";
szTypeName = "";
}

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;
};


public static string GetShellFileType(string fileName)
{
var shinfo = new SHFILEINFO(true);
const int flags = SHGFI_TYPENAME | SHGFI_USEFILEATTRIBUTES;

if (SHGetFileInfo(fileName, FILE_ATTRIBUTE_NORMAL, ref shinfo, (uint)Marshal.SizeOf(shinfo), flags) == IntPtr.Zero)
{
return "File";
}

return shinfo.szTypeName;
}
}

然后,只需调用 NativeMethods.GetShellFileType("...")

关于c# - 如何获取文件类型名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9600905/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com