zoukankan      html  css  js  c++  java
  • 基本编目信息可自动提取

    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:其实文档的详细信息里面的标题、主题、标记、类别、备注等都可以找到的,只是我大多数文档都没有。。


    作者:但,我知道
    出处:http://www.cnblogs.com/haichao/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    [学习笔记]设计模式之Bridge
    整数划分问题 动态规划
    powershell 发邮件
    python 对象序列化并压缩
    python的序列化与反序列化(例子:dict保存成文件,文件读取成dict)
    ACM-ICPC 2018 world final A题 Catch the Plane
    AlphaPose论文笔记《RMPE: Regional Multi-person Pose Estimation》
    《DensePose: Dense Human Pose Estimation In The Wild》阅读笔记
    [转]tensorflow 中的卷积conv2d的padding 到底要padding多少
    OpenPose论文笔记《Realtime Multi-Person 2D Human Pose Estimation using Part Affinity Fields》
  • 原文地址:https://www.cnblogs.com/haichao/p/2986489.html
Copyright © 2011-2022 走看看