收录日期:2018/08/16 06:37:43 时间:2016/05/20 18:27:05 标签:C#
打开资源管理器,以详细列表方式查看文件列表,有一叫做"类型"的列,这个列的内容如何得到呀?

比如.cs文件的文件类型就显示:C# Source file
.exe文件的文件类型就显示:应用程序
文件夹就直接显示为文件夹

这个文件类型是怎么找到的?好象FileSystemInfo里面没有,需要到注册表去找吗?
注册表又是查找哪些值呀?
在注册表里找
HKEY_CLASSES_ROOT\.cs  下


键值Content Type 为 text/plain
(默认) 为 csfile


再找csfile项

得到
(默认) 为 C# Source file

还可以得到默认Open的程序, 等...

当然, 要写成程序, 无非也就是访问注册表
刚写了一段测试用的, 能取扩展名对应的描述文字

string strExt = ".cs";
string strDefault = "";
RegistryKey regRead;
regRead = Registry.ClassesRoot.OpenSubKey(strExt, true);
if(regRead != null)
{
strDefault = regRead.GetValue("").ToString();
if(strDefault != null)
{
regRead = Registry.ClassesRoot.OpenSubKey(strDefault, true);
if(regRead != null)
{
strDefault = regRead.GetValue("").ToString();
MessageBox.Show(strDefault);
}
}
}
也可以用获取:

assoc .cs
肯定是注册表,同意楼上
有更简单、高效的方法:用API函数 SHGetFileInfo

DWORD_PTR SHGetFileInfo( LPCTSTR pszPath,
    DWORD dwFileAttributes,
    SHFILEINFO *psfi,              //此类型定义在下面
    UINT cbFileInfo,
    UINT uFlags
);


typedef struct _SHFILEINFO {
    HICON hIcon;
    int iIcon;
    DWORD dwAttributes;
    TCHAR szDisplayName[MAX_PATH];
    TCHAR szTypeName[80];            //注意这一个
} SHFILEINFO;