C# 取得檔案Tag Information 資訊

本作參考:http://hougii.blogspot.tw/2011/03/20110322-c.html
今天希望改一下,檔案資訊的產生方法。希望避免使用到外部檔案,而直接使用Microsoft原本就支援的File Information Tag
但是找了好多關鍵字都不正確,最後好不容易才找到。
原作上面提供了C#的寫法。我將它修改後加入了更方便的功能。


public static Dictionary<string,Dictionary> getFileTag(string folderPath) {
Dictionary<string, Dictionary> rtn = new Dictionary<string, Dictionary>();
System.Type oType = System.Type.GetTypeFromProgID("Shell.Application");
object o = System.Activator.CreateInstance(oType);
object objFolder = oType.InvokeMember("Namespace", System.Reflection.BindingFlags.InvokeMethod, null, o, new object[] { folderPath });

// // // string[] sFiles = System.IO.Directory.GetFiles(folderPath, "*.*", SearchOption.AllDirectories);
string[] sFiles = System.IO.Directory.GetFiles(folderPath, "*.*", SearchOption.AllDirectories).
Where(file => file.ToLower().EndsWith("mp4") || file.ToLower().EndsWith("avi") || file.ToLower().EndsWith("mkv") || file.ToLower().EndsWith("wmv") || file.ToLower().EndsWith("mpg") || file.ToLower().EndsWith("mpeg")).ToArray();
foreach (string sfileName in sFiles) {
Dictionary sfd = new Dictionary();
object objFile2 = objFolder.GetType().InvokeMember("ParseName", System.Reflection.BindingFlags.InvokeMethod, null, objFolder, new object[] { System.IO.Path.GetFileName(sfileName) });
for (int i = -1; i < 287; i++) {
var name = objFolder.GetType().InvokeMember("GetDetailsOf", System.Reflection.BindingFlags.InvokeMethod, null, objFolder, new object[] { 0, i });
var data = objFolder.GetType().InvokeMember("GetDetailsOf", System.Reflection.BindingFlags.InvokeMethod, null, objFolder, new object[] { objFile2, i });
// // // Console.WriteLine(name + ":" + data);
sfd.Add(name.ToString(), data.ToString());
// 標題, 參與演出者
}
rtn.Add(sfileName, sfd);
}
return rtn;
}

廣告

About fenjj

Perfect !!??...
本篇發表於 Uncategorized。將永久鏈結加入書籤。

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s