收录日期:2019/01/17 21:50:55 时间: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;

触发器的问题:xx is mutating, trigger/function may not see it ms sql sever 中一指定的表如果有新记录产生,怎么样做才知道 用ado方式连接oracle数据库,连接成功,可是怎样让他执行sql语句? 请问!如何选取并显示数据库中的数据。谢谢! 工具栏中保存图像 ASP+SQL问题,急 在C++ primer 中的一个练习 多线程操作窗体控件 急!delphi升级遇到的困难!分不够另加! 请问如何将select的结果写入EXECL 一个NameNotFoundException找不到EJB的问题(WebLogic8+JB9) 菜鸟问题:如何写自动运行的宏(在线等) 安装程序有点问题,大家帮我看看 interbase7.1+ibx的触发器问题 关于static的简单问题? 请教用PHP连接MYSQL问题。 cookie问题 请问:这条命令是干吗的???? _variant_t和string,或int类型怎么转换? 这是IE的漏洞吗? 有没有可能存在不同商品但是有相同的条形码? 给我一个建议,该不该交钱给学校。 存储过程返回值问题,马上结贴!不胜感激 决定放弃IT 我的sqlserver企业管理器注册服务器出了点问题,请大家帮帮忙 请问怎么办才能在DBGrid+ADOQuery显示自定义的日期格式?万分感谢!!! [ Solaris平台编程 ] 哪里有Solaris平台编程所用的C的函数库?[ 问题解决即结贴 ] 从数据库中提数据的小问题,急!!(在线) exec(select * from tablename)执行的结果怎么放入临时表中 pb得到文件时间问题(API)--我急了