基本编目信息可自动提取

1  自由畅谈

对于所有媒体文件,想视频、音频、图片、文档等,他们的基本编目信息有什么呢。此时,我们可以打开资源管理器,查看文件属性:

image

我们也可以点击选择文件,在最下面查看其属性。

视频:

image

音频:

image

文档:

image

图片:

image

如果你觉得还不够,尽管右击文件,选择属性,选中详细信息,这回出现一大片:

image

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;

            }

  运行结果:

image

 上面只是为了演示FileInfo类的属性,用反射机制来得到FileInfo的属性,实战应用可直接用FileInfo对象后面加点,然后蹦出一大摞东西,从中慢慢选择你想要的属性。

  总结下,利用FileInfo可以得到的文件信息重要的有NameLengthDirectoryName(Directory)FullNameCreationTimeLastAccessTimeLastWriteTime

3  走得更远

一般需求,以上就行了,不过当我右键属性时看到这么多藏在文件内部的信息,我手痒了,这些属性我也要,呵呵,你是不是也这样和我一样贪心呢,是的话就跟我去寻找着藏在文件内部的宝藏。

  查阅下资料,很简单。首先引用下Com组件Microsoft Shell Controls And Automation,注意要把引入的DllEmbed 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。可是我简单运行了下,发现大多数都是空白滴。经我和文件详细类别一一对应并做筛选了下,比较可用的只有十个,额,汗颜啊。(以视频为例)

  NameSizeType(项目类型,好东西呢)DataModifiedDataCreatedDataAccessedRating(分级,win7的新东西,可惜我不用)Length(视频长度)Bit rate(比特率,好东西)Assistant’s Name(计算机,详细列表这样翻译的,有点汗)

   可是那些看起来很专业的属性怎么没呢,比如:

image

  我不信,就加大iCol,看看还有没有资料藏起来没有告诉我,就一狠心加了下面的代码:

for (int i = 87; i < 2000; i++)

                {

                    dics.Add(string.Format("{0}:{1}", i, dir.GetDetailsOf(item, i)));

                }

  呵呵,从87以后一直到2000,很狠啊,不过结果让我很满意呢,虽然有将近1800的没数值,让我找到了帧高度、帧宽度等很有用的属性。

  接下来就顺分顺水,我又连续对音频、图片、文档进行处理,总结出下面这些有用的属性:其中ID对应上面代码里面关键方法的iColumn参数:

image

属性名用中英文显示,中文是详细列表里的纯正翻译,可用文件类型的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:其实文档的详细信息里面的标题、主题、标记、类别、备注等都可以找到的,只是我大多数文档都没有。。

posted @ 2013-03-28 12:47  但,我知道  阅读(1438)  评论(1编辑  收藏  举报