這邊記錄ㄧ下要如何取得檔案內容中的詳細資料 …

首先我們必須將Microsoft Shell Controls and Automation加入參考。

加入Shell32命名空間後就可以開始使用了…

使用上先建立ShellClass物件實體,透過ShellClass中的Namespace方法取得Folder物件,接著利用ParseName方法取得FolderItem物件,取得了FolderItem物件後對其叫用GetDetailsOf,將要抓取的詳細資料索引代入即可求得。 static string GetDetailValue(string file, int column) {     ShellClass sh = new ShellClass();     Folder dir = sh.NameSpace(Path.GetDirectoryName(file));     FolderItem item = dir.ParseName(Path.GetFileName(file));     return dir.GetDetailsOf(item, column); }

但是詳細資料頁面中的資料有很多,依照不同檔案類型又有不同的資訊,要如何才能取得想要的詳細資料索引?只要透過類似上面的作法,將GetDetailsOf方法的第一個參數代入0即可: static IEnumerable> GetDetailColumn() {     ShellClass sh = new ShellClass();     Folder dir = sh.NameSpace(@“c:");

    int idx = 0;     string column idx);     do      {         yield return new KeyValuePair(columnName, idx);         column ++idx);                     } while (!string.IsNullOrEmpty(columnName)); }

完整的範例如下:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using Shell32;

using System.IO;

namespace ConsoleApplication1

{

    class Program

    {

        static void Main(string[] args)

        {

            ViewDetailColumn();

            Console.WriteLine(new string(’=’, 50));

            var file = @“C:\Users\Public\Music\Sample Music\Kalimba.mp3”;

            ViewDetailValue(file, “Album”);

            ViewDetailValue(file, “Size”);

        }

        static IEnumerable> GetDetailColumn()

        {

            ShellClass sh = new ShellClass();

            Folder dir = sh.NameSpace(@“c:");

            int idx = 0;

            string column idx);

            do

            {

                yield return new KeyValuePair(columnName, idx);

                column ++idx);                             } while (!string.IsNullOrEmpty(columnName));

        }

        static IEnumerable> GetDetailColumn(int offset, int count)

        {

            ShellClass sh = new ShellClass();

            Folder dir = sh.NameSpace(@“c:");

            for (var idx = offset; idx (dir.GetDetailsOf(0, idx), idx);

            }

        }

        static void ViewDetailColumn()

        {

            var columns = GetDetailColumn();

            foreach (var item in columns)

            {

                Console.WriteLine(item.Key);

            }

        }

        static void ViewDetailColumn(int offset, int count)

        {

            var columns = GetDetailColumn(offset, count);

            foreach (var item in columns)

            {

                Console.WriteLine(item.Key);

            }

        }

        static string GetDetailValue(string file, int column)

        {

            ShellClass sh = new ShellClass();

            Folder dir = sh.NameSpace(Path.GetDirectoryName(file));

            FolderItem item = dir.ParseName(Path.GetFileName(file));

            return dir.GetDetailsOf(item, column);

        }

        static void ViewDetailValue(string file, int column)

        {

            Console.WriteLine(GetDetailValue(file, column));

        }

        static string GetDetailValue(string file, string column)

        {

            var linq = from item in GetDetailColumn()

                       where item.Key == column

                       select item.Value;

            return GetDetailValue(file, linq.FirstOrDefault());

        }

        static void ViewDetailValue(string file, string column)

        {

            Console.WriteLine(GetDetailValue(file, column));

        }

    }

}

運行結果如下:

如何用C#获得文件信息以及扩展信息