9

我有一个简单的 WCF 服务,可以让客户/消费者向它上传图像、音频或视频文件。上传后,服务应该分析文件并以某种方式检索以下属性:

图片:宽度、高度、拍摄日期、使用的程序

音频:运行时间、艺术家、专辑、流派、比特率、出版年份

视频:运行时间、宽度、高度、帧/秒、视频比特率、音频比特率

显然 Windows 可以很容易地获取和显示这些属性,但我如何在 C# 中做到这一点?

4

2 回答 2

7

礼貌这个线程。

我已经验证这会获取所有文件属性,包括扩展属性。

在您的项目中,转到“添加引用”-> COM->“Microsoft Shell 控件和自动化”

添加它,再次由所述线程提供,一个 C# 方法来读取目录中文件的属性。(我仍在研究是否可以在特定文件上执行此功能。如果不是,您始终可以传递有问题的文件名并验证仅获取该文件的属性。)

public static void Main(string[] args)
{
    List<string> arrHeaders = new List<string>();

    Shell32.Shell shell = new Shell32.Shell();
    Shell32.Folder objFolder;

    objFolder = shell.NameSpace(@"C:\temp\testprop");

    for( int i = 0; i < short.MaxValue; i++ )
    {
        string header = objFolder.GetDetailsOf(null, i);
        if (String.IsNullOrEmpty(header))
            break;
        arrHeaders.Add(header);
    }

    foreach(Shell32.FolderItem2 item in objFolder.Items())
    {
        for (int i = 0; i < arrHeaders.Count; i++)
        {
            Console.WriteLine("{0}\t{1}: {2}", i, arrHeaders[i], objFolder.GetDetailsOf(item, i));
        }
    }
}
于 2011-06-04T06:26:46.673 回答
2

访问该信息的最简单方法是让 (Explorer) Shell 为您执行此操作,然后(通过Windows Property System)请求它。从 C# 执行此操作的最简单方法可能是使用适用于 .NET 的 Windows API 代码包

具体来说,您将希望获得对 Property Store 的访问权限。如需入门帮助,请查看 PropertiesEditDemo 项目的 Samples 文件夹。

您可以通过读取文件的所有元数据来自己完成,但问题是您的程序必须知道所有可用文件类型的所有可用元数据。对于这些知识,我通常更喜欢挂在 Shell 上。

于 2011-06-04T06:29:34.957 回答