在C#.net中获取扩展文件属性

时间:2013-10-09 00:44:31

标签: c# .net c#-4.0

我找到了这篇文章:

Read/Write 'Extended' file properties (C#)

这解释了如何在.net中获取扩展文件属性。但它指出了一个已有10年历史的Code Project文章。

线程本身已有5年历史。

现在有更好的方法来获取标题,子标题,剧集名称等扩展文件属性吗?

我真正想要做的是获取有关各个文件的扩展文件信息。它看起来像这个代码循环通过一个目录,并获取这些文件的文件信息。

3 个答案:

答案 0 :(得分:1)

我已经使用了 Windows API代码包

ShellObject picture = ShellObject.FromParsingName(file);

var camera = picture.Properties.GetProperty(SystemProperties.System.Photo.CameraModel);
newItem.CameraModel = GetValue(camera, String.Empty, String.Empty);

var company = picture.Properties.GetProperty(SystemProperties.System.Photo.CameraManufacturer);
newItem.CameraMaker = GetValue(company, String.Empty, String.Empty);

Link to a Blogpost by Rob Sanders

答案 1 :(得分:0)

您可以使用我的MetadataExtractor库从图像和视频文件中访问各种元数据。它支持Exif,IPTC和许多其他类型的元数据。

可在GitHubNuGet上找到。

答案 2 :(得分:0)

要运行此代码,您需要添加两个块软件包-我必须从软件包管理器控制台中添加较旧的版本,因为最新版本不会安装在我以前的VS 2012中:

    Install-Package WindowsAPICodePack-Core -Version 1.1.2
    Install-Package WindowsAPICodePack-Shell -Version 1.1.1

下面是一些列出所有属性的代码:

 using Microsoft.WindowsAPICodePack.Shell;

    private void ListExtendedProperties(string filePath)
    {
        var file = ShellObject.FromParsingName(filePath);
        var i = 0;
        foreach (var property in file.Properties.DefaultPropertyCollection)
        {
            var name = (property.CanonicalName ?? "unnamed-[" + i + "]").Replace("System.", string.Empty);
            var t = Nullable.GetUnderlyingType(property.ValueType) ?? property.ValueType;
            var value = (null == property.ValueAsObject)
                ? string.Empty
                : (Convert.ChangeType(property.ValueAsObject, t)).ToString();
            var friendlyName = property.Description.DisplayName;
            Console.WriteLine(i++ + " " + name + "/" + friendlyName + ": " + value);
        }
    }