用C#获取文件类型信息
2012-12-20 11:21
363 查看
http://www.bugucn.com/2011/12/821.html
用C#获取文件类型信息
发布由 efour on 01 十二 2011 / 0 Comment十二
1
2011
![](http://www.bugucn.com/wp-content/themes/Minos/images/comment.png)
0
原帖及讨论:http://bbs.bccn.net/thread-87653-1-1.html
![](http://www.bccn.net/Article/UploadFDL0024/200610/20061014180144755.gif)
[手动查看]
资源管理器 -> 工具 -> 文件夹选项 -> 文件类型
[C/C++]
#include <windows.h>
#include <shellapi.h> //SHFILEINFO结构和SHGetFileInfo函数所在
//#include <stdio.h>
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
SHFILEINFO shfi;
memset(&shfi,0,sizeof(shfi));
SHGetFileInfo(“C:\\Windows\\notepad.exe”, //文件路径
FILE_ATTRIBUTE_NORMAL, //文件属性
&shfi, //信息结构
sizeof(shfi),
SHGFI_TYPENAME); //获取标识
char *msg = shfi.szTypeName;
//在dos窗口输出
//printf(“%s\n”,msg);
//getchar();
LPCTSTR lpcstr = (LPCTSTR)msg; //char*转换LPCTSTR
MessageBox(NULL, lpcstr, “文件类型”, MB_OK);
return 0;
}
[C#] – mode 1
using Microsoft.Win32;
//通过查询注册表来获取文件类型名称,但此方法具有致命缺陷!
string ext = “.mp3″;
string desc = (string)Registry.ClassesRoot.OpenSubKey(ext).GetValue(null);
string typeinfo = (string)Registry.ClassesRoot.OpenSubKey(desc).GetValue(null);
[C#] – mode 2
using System.Runtime.InteropServices;
//在shell32.dll导入函数SHGetFileInfo
[DllImport("shell32.dll", EntryPoint="SHGetFileInfo")]
public static extern int GetFileInfo(string pszPath, int dwFileAttributes,
ref FileInfomation psfi, int cbFileInfo,int uFlags);
//定义SHFILEINFO结构(名字随便起,这里用FileInfomation)
[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;
}
//定义文件属性标识
public enum FileAttributeFlags : int
{
FILE_ATTRIBUTE_READONLY =0×00000001,
FILE_ATTRIBUTE_HIDDEN =0×00000002,
FILE_ATTRIBUTE_SYSTEM =0×00000004,
FILE_ATTRIBUTE_DIRECTORY =0×00000010,
FILE_ATTRIBUTE_ARCHIVE =0×00000020,
FILE_ATTRIBUTE_DEVICE =0×00000040,
FILE_ATTRIBUTE_NORMAL =0×00000080,
FILE_ATTRIBUTE_TEMPORARY =0×00000100,
FILE_ATTRIBUTE_SPARSE_FILE =0×00000200,
FILE_ATTRIBUTE_REPARSE_POINT =0×00000400,
FILE_ATTRIBUTE_COMPRESSED =0×00000800,
FILE_ATTRIBUTE_OFFLINE =0×00001000,
FILE_ATTRIBUTE_NOT_CONTENT_INDEXED =0×00002000,
FILE_ATTRIBUTE_ENCRYPTED =0×00004000
}
//定义获取资源标识
public enum GetFileInfoFlags : int
{
SHGFI_ICON =0×000000100, // get icon
SHGFI_DISPLAYNAME =0×000000200, // get display name
SHGFI_TYPENAME =0×000000400, // get type name
SHGFI_ATTRIBUTES =0×000000800, // get attributes
SHGFI_ICONLOCATION =0×000001000, // get icon location
SHGFI_EXETYPE =0×000002000, // return exe type
SHGFI_SYSICONINDEX =0×000004000, // get system icon index
SHGFI_LINKOVERLAY =0×000008000, // put a link overlay on icon
SHGFI_SELECTED =0×000010000, // show icon in selected state
SHGFI_ATTR_SPECIFIED =0×000020000, // get only specified attributes
SHGFI_LARGEICON =0×000000000, // get large icon
SHGFI_SMALLICON =0×000000001, // get small icon
SHGFI_OPENICON =0×000000002, // get open icon
SHGFI_SHELLICONSIZE =0×000000004, // get shell size icon
SHGFI_PIDL =0×000000008, // pszPath is a pidl
SHGFI_USEFILEATTRIBUTES =0×000000010, // use passed dwFileAttribute
SHGFI_ADDOVERLAYS =0×000000020, // apply the appropriate overlays
SHGFI_OVERLAYINDEX =0×000000040 // Get the index of the overlay
}
private string GetTypeName(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;
}
private void Form1_Load(object sender, System.EventArgs e)
{
string fileName = @”C:\Windows\notepad.exe”; //定义文件路径
string fileTypeName = GetTypeName(fileName);
MessageBox.Show(fileTypeName);
}
后记:搞了一个深夜,一头雾水~~~
[示例源代码]
点击下载该文件
此主题相关图片如下:
![](http://www.bccn.net/Article/UploadFDL0024/200610/20061014180402195.gif)
相关文章推荐
- 用C#和WMI获取逻辑驱动器详细信息(驱动器类型,文件系统,剩余空间等)
- C#利用反射在debug状态下获取调用代码所在文件及行信息
- C# 获取文件的MIME类型
- C# 获取指定目录下所有文件信息、删除文件、目录,移动目录,拷贝目录
- C# 获取文件的数字签名信息
- C# 获取 mp3文件信息
- c#通过oledb获取excel文件表结构信息
- js 获取input type="file" 选择的文件大小、文件名称、上次修改时间、类型等信息
- c#反射机制学习和利用反射获取类型信息
- C# 获取枚举类型中所有描述信息
- C# 获取指定目录下所有文件信息、移动目录、拷贝目录
- c#反射机制学习和利用反射获取类型信息
- php获取文件类型和文件信息操作
- C# 获取文件大小,创建时间,文件信息,FileInfo类的属性表
- C# (asp.net) 获取文件详细备注信息
- C# 获取往控件中拖进的文件或文件夹的信息(原创)
- C# 获取文件大小,创建时间,文件信息,FileInfo类的属性表
- C#遍历文件夹, 获取文件/目录信息
- C# 获取指定目录下所有文件信息、移动目录、拷贝目录
- c#通过oledb获取excel文件表结构信息