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

推荐订阅源

B
Blog RSS Feed
Security Archives - TechRepublic
Security Archives - TechRepublic
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
小众软件
小众软件
V
V2EX
B
Blog
腾讯CDC
D
DataBreaches.Net
H
Hackread – Cybersecurity News, Data Breaches, AI and More
月光博客
月光博客
The Cloudflare Blog
T
The Blog of Author Tim Ferriss
云风的 BLOG
云风的 BLOG
Latest news
Latest news
L
LINUX DO - 最新话题
C
Check Point Blog
Attack and Defense Labs
Attack and Defense Labs
H
Hacker News: Front Page
Forbes - Security
Forbes - Security
H
Help Net Security
S
Securelist
D
Docker
Blog — PlanetScale
Blog — PlanetScale
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
The Last Watchdog
The Last Watchdog
N
News and Events Feed by Topic
G
Google Developers Blog
AI
AI
I
Intezer
L
LangChain Blog
NISL@THU
NISL@THU
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
人人都是产品经理
人人都是产品经理
Hugging Face - Blog
Hugging Face - Blog
罗磊的独立博客
T
Tenable Blog
Jina AI
Jina AI
I
InfoQ
C
Cybersecurity and Infrastructure Security Agency CISA
Cisco Talos Blog
Cisco Talos Blog
C
CERT Recently Published Vulnerability Notes
GbyAI
GbyAI
T
Tailwind CSS Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
O
OpenAI News
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Know Your Adversary
Know Your Adversary
T
Troy Hunt's Blog
Google Online Security Blog
Google Online Security Blog

博客园 - 阿哲

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图标。