基本编目信息可自动提取
1 自由畅谈
对于所有媒体文件,想视频、音频、图片、文档等,他们的基本编目信息有什么呢。此时,我们可以打开资源管理器,查看文件属性:
我们也可以点击选择文件,在最下面查看其属性。
视频:
音频:
文档:
图片:
如果你觉得还不够,尽管右击文件,选择属性,选中详细信息,这回出现一大片:
2 言归正传
是不是有点眼花呢。我细细整理了下,视频、音频、图片、文档等媒资文件共有属性如下:
l 文件名
l 文件大小
l 路径
l 创建时间
l 最后修改时间
l 最后访问时间
如果要得到这些东西呢,我们可以使用FileInfo类..
实例代码:
OpenFileDialog openfile = new OpenFileDialog();
if ((bool)openfile.ShowDialog())
{
FileInfo fileInfo = new FileInfo(openfile.FileName);
System.Reflection.PropertyInfo[] properties = fileInfo.GetType().GetProperties();
List<string> dics = new List<string>();
foreach (System.Reflection.PropertyInfo p in properties)
{
dics.Add(p.Name + ":" + p.GetValue(fileInfo, null));
}
this.listBox1.ItemsSource = dics;
}
运行结果:
上面只是为了演示FileInfo类的属性,用反射机制来得到FileInfo的属性,实战应用可直接用FileInfo对象后面加点,然后蹦出一大摞东西,从中慢慢选择你想要的属性。
总结下,利用FileInfo可以得到的文件信息重要的有Name、Length、DirectoryName(同Directory)、FullName、CreationTime、LastAccessTime、LastWriteTime。
3 走得更远
一般需求,以上就行了,不过当我右键属性时看到这么多藏在文件内部的信息,我手痒了,这些属性我也要,呵呵,你是不是也这样和我一样贪心呢,是的话就跟我去寻找着藏在文件内部的宝藏。
查阅下资料,很简单。首先引用下Com组件Microsoft Shell Controls And Automation,注意要把引入的Dll的Embed Interop Type也就是嵌入互操作类型改为false,然后主要代码如下:
OpenFileDialog openfile = new OpenFileDialog();
if ((bool)openfile.ShowDialog())
{
List<string> dics = new List<string>();
ShellClass sh = new ShellClass();
Folder dir = sh.NameSpace(Path.GetDirectoryName(openfile.FileName));
FolderItem item = dir.ParseName(Path.GetFileName(openfile.FileName));
for (int i = 0; i < attributeList.GetUpperBound(0); i++)
{
dics.Add(string.Format("{0}:{1}", attributeList[i], dir.GetDetailsOf(item, i)));
}
this.listBox1.ItemsSource = dics;
}
其中attributeList:
string[] attributeList = new string[] { " Name", " Size", " Type", " Date modified", " Date created", " Date accessed", " Attributes", " Offline status", " Offline availability", " Perceived type", " Owner", " Kinds", " Date taken", " Artists", " Album", " Year", " Genre", " Conductors", " Tags", " Rating", " Authors", " Title", " Subject", " Categories", " Comments", " Copyright", " #", " Length", " Bit rate", " Protected", " Camera model", " Dimensions", " Camera maker", " Company", " File description", " Program name", " Duration", " Is online", " Is recurring", " Location", " Optional attendee addresses", " Optional attendees", " Organizer address", " Organizer name", " Reminder time", " Required attendee addresses", " Required attendees", " Resources", " Free/busy status", " Total size", " Account name", " Computer", " Anniversary", " Assistant's name", " Assistant's phone", " Birthday", " Business address", " Business city", " Business country/region", " Business P.O. box", " Business postal code", " Business state or province", " Business street", " Business fax", " Business home page", " Business phone", " Callback number", " Car phone", " Children", " Company main phone", " Department", " E-mail Address", " E-mail2", " E-mail3", " E-mail list", " E-mail display name", " File as", " First name", " Full name", " Gender", " Given name", " Hobbies", " Home address", " Home city", " Home country/region", " Home P.O. box", " Home postal cod", };
iCol对应文件详细属性的ID,根据ID可以得到其属性值。资料给出的属性值有87个,值名在attributeList中。可是我简单运行了下,发现大多数都是空白滴。经我和文件详细类别一一对应并做筛选了下,比较可用的只有十个,额,汗颜啊。(以视频为例)
Name、Size、Type(项目类型,好东西呢)、DataModified、DataCreated、DataAccessed、Rating(分级,win7的新东西,可惜我不用)、Length(视频长度)、Bit rate(比特率,好东西)、Assistant’s Name(计算机,详细列表这样翻译的,有点汗)
可是那些看起来很专业的属性怎么没呢,比如:
我不信,就加大iCol,看看还有没有资料藏起来没有告诉我,就一狠心加了下面的代码:
for (int i = 87; i < 2000; i++)
{
dics.Add(string.Format("{0}:{1}", i, dir.GetDetailsOf(item, i)));
}
呵呵,从87以后一直到2000,很狠啊,不过结果让我很满意呢,虽然有将近1800的没数值,让我找到了帧高度、帧宽度等很有用的属性。
接下来就顺分顺水,我又连续对音频、图片、文档进行处理,总结出下面这些有用的属性:其中ID对应上面代码里面关键方法的iColumn参数:
属性名用中英文显示,中文是详细列表里的纯正翻译,可用文件类型的1-视频、2-音频、3-图片、4-文档:
ID | 属性名 | 可用文件类型 |
0 | 文件名-Name | 1234 |
1 | 大小-Size | 1234 |
2 | 项目类型-Type | 1234 |
3 | 修改日期-Data modified | 1234 |
4 | 创建日期-Data created | 1234 |
5 | 访问日期-Data accessed | 1234 |
9 | Perceived type 如:视频 音频 图像 文档 | 1234 |
10 | 所有者-Ower | 1234 |
11 | Kinds 如:视频 音乐 图片 文档 | 1234 |
19 | Rating-分级 | 1234 |
21 | Title-标题 | 1234 |
27 | Length-长度 | 12 |
28 | Bit rate-比特率 | 12 |
177 | 文件夹路径 | 1234 |
282 | 比特率 | 1 |
283 | 帧高度 | 1 |
284 | 帧速率 | 1 |
285 | 帧宽度 | 1 |
286 | 总比特数 | 1 |
289 | Audio tracks | 1 |
293 | Video tracks | 1 |
1-视频、2-音频、3-图片、4-文档
注1:其实文档的详细信息里面的标题、主题、标记、类别、备注等都可以找到的,只是我大多数文档都没有。。
作者:但,我知道
出处:http://www.cnblogs.com/haichao/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。