惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Y
Y Combinator Blog
The GitHub Blog
The GitHub Blog
云风的 BLOG
云风的 BLOG
Engineering at Meta
Engineering at Meta
Google DeepMind News
Google DeepMind News
aimingoo的专栏
aimingoo的专栏
Recent Announcements
Recent Announcements
A
About on SuperTechFans
U
Unit 42
MyScale Blog
MyScale Blog
J
Java Code Geeks
博客园_首页
Blog — PlanetScale
Blog — PlanetScale
D
Docker
Microsoft Azure Blog
Microsoft Azure Blog
博客园 - 司徒正美
量子位
月光博客
月光博客
G
Google Developers Blog
V
V2EX
博客园 - 聂微东
宝玉的分享
宝玉的分享
IT之家
IT之家
Vercel News
Vercel News

博客园 - 阿哲

SqlServer 2005 快速设置字段/表 的描述字段 将Visio文件装换成HTML文件(在服务器上转换,客户端无需安装visio即可查看) string:值类型?引用类型?[转] SqlServer2005常用sql语句 SQL中FOR XML子句的各种用法 完成类似QQ邮箱中‘HTML方式查看’功能查看Office文件 vs2008生成自定义dll,VS2008发布、生成网站时设置固定的dll文件名 开源.Net CMS系统 [转] 测试使用Windows Live Writter写Blog 试用Windows Live Mail OutlookExpress使用技巧 剩余的GMail邀请 实体类+自定义控件=? 用反射+特性列出所有的枚举变量及其描述信息,绑定到DropDownList上。 有关.NET和RS232设备通讯 .NET资源(收藏) 转:使用P/Invoke来开发用于与串行设备通讯的.NET基类(翻译) 最近有空,研究了一下.NET的通讯方面 实体和实体的集合-续2
获得Windows中文件类型名称
阿哲 · 2009-03-07 · via 博客园 - 阿哲

如何获得windows中文件类型名称,例如txt文件的类型名称“文本文件”;xls文件则显示:“Microsoft Office Excel 97-2003工作表”,使用C#中的FileInfo类是不行的,那么只有导入shell32.dll文件来获得。

首先要导入:

using System.Runtime.InteropServices;

方法如下:


        [DllImport(
"shell32.dll", EntryPoint = "SHGetFileInfo")]
        
public static extern int GetFileInfo(string pszPath, int dwFileAttributes, 
            
ref FileInfomation psfi, int cbFileInfo, int uFlags);/// <summary>
        
/// 定义SHFILEINFO结构(名字随便起,这里用FileInfomation)
        
/// </summary>
        [StructLayout(LayoutKind.Sequential)]
        
public struct FileInfomation
        {
            
public IntPtr hIcon;
            
public int iIcon;
            
public int dwAttributes;

            [MarshalAs(UnmanagedType.ByValTStr, SizeConst 

= 260)]
            
public string szDisplayName;

            [MarshalAs(UnmanagedType.ByValTStr, SizeConst 

= 80)]
            
public string szTypeName;
        }
/// <summary>
        
/// 定义文件属性标识
        
/// </summary>
        public enum FileAttributeFlags : int
        {
            FILE_ATTRIBUTE_READONLY 
= 0x00000001,
            FILE_ATTRIBUTE_HIDDEN 
= 0x00000002,
            FILE_ATTRIBUTE_SYSTEM 
= 0x00000004,
            FILE_ATTRIBUTE_DIRECTORY 
= 0x00000010,
            FILE_ATTRIBUTE_ARCHIVE 
= 0x00000020,
            FILE_ATTRIBUTE_DEVICE 
= 0x00000040,
            FILE_ATTRIBUTE_NORMAL 
= 0x00000080,
            FILE_ATTRIBUTE_TEMPORARY 
= 0x00000100,
            FILE_ATTRIBUTE_SPARSE_FILE 
= 0x00000200,
            FILE_ATTRIBUTE_REPARSE_POINT 
= 0x00000400,
            FILE_ATTRIBUTE_COMPRESSED 
= 0x00000800,
            FILE_ATTRIBUTE_OFFLINE 
= 0x00001000,
            FILE_ATTRIBUTE_NOT_CONTENT_INDEXED 
= 0x00002000,
            FILE_ATTRIBUTE_ENCRYPTED 
= 0x00004000
        }
/// <summary>
        
/// 定义获取资源标识
        
/// </summary>
        public enum GetFileInfoFlags : int
        {
            SHGFI_ICON 
= 0x000000100,            // get icon
            SHGFI_DISPLAYNAME = 0x000000200,    // get display name
            SHGFI_TYPENAME = 0x000000400,        // get type name
            SHGFI_ATTRIBUTES = 0x000000800,        // get attributes
            SHGFI_ICONLOCATION = 0x000001000,    // get icon location
            SHGFI_EXETYPE = 0x000002000,        // return exe type
            SHGFI_SYSICONINDEX = 0x000004000,    // get system icon index
            SHGFI_LINKOVERLAY = 0x000008000,    // put a link overlay on icon
            SHGFI_SELECTED = 0x000010000,        // show icon in selected state
            SHGFI_ATTR_SPECIFIED = 0x000020000,    // get only specified attributes
            SHGFI_LARGEICON = 0x000000000,        // get large icon
            SHGFI_SMALLICON = 0x000000001,        // get small icon
            SHGFI_OPENICON = 0x000000002,        // get open icon
            SHGFI_SHELLICONSIZE = 0x000000004,    // get shell size icon
            SHGFI_PIDL = 0x000000008,            // pszPath is a pidl
            SHGFI_USEFILEATTRIBUTES = 0x000000010,    // use passed dwFileAttribute
            SHGFI_ADDOVERLAYS = 0x000000020,    // apply the appropriate overlays
            SHGFI_OVERLAYINDEX = 0x000000040    // Get the index of the overlay
        }public static string GetFileTypeName(string fileName)
        {
            FileInfomation fileInfo 
= new FileInfomation();  //初始化FileInfomation结构//调用GetFileInfo函数,最后一个参数说明获取的是文件类型(SHGFI_TYPENAME)
            int res = GetFileInfo(fileName, (int)FileAttributeFlags.FILE_ATTRIBUTE_NORMAL,
                
ref fileInfo, Marshal.SizeOf(fileInfo), (int)GetFileInfoFlags.SHGFI_TYPENAME);return fileInfo.szTypeName;
        }

使用GetFileTypeName方法可以获得文件类型信息,大家可以试试。

另:同时这个方法也可以用来获得exe文件中的icon图标。