獲得Windows中檔案類型名稱

來源:互聯網
上載者:User

如何獲得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表徵圖。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.