在一个在线文件管理模块中要显示文件的类型信息,
C#好像不能直接取得文件的类型信息,如:cs文件显示:Visual C# Source file,
网上找到如下代码,备忘
using System;
using System.Runtime.InteropServices;
namespace eWindCMS.Utility
{
public class FileInfoHelper
{
public static 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;
}
//在shell32.dll导入函数SHGetFileInfo
[DllImport("shell32.dll", EntryPoint="SHGetFileInfo")]
private static extern int GetFileInfo(string pszPath, int dwFileAttributes, ref FileInfomation psfi, int cbFileInfo,int uFlags);
//定义SHFILEINFO结构(名字随便起,这里用FileInfomation)
[StructLayout(LayoutKind.Sequential)]
private 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;
}
//定义文件属性标识
private 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
}
//定义获取资源标识
private 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
}
}
}