C# 获取特定文件属性

C# 获取特定文件属性,c#,file-attributes,file-properties,C#,File Attributes,File Properties,我有一个简单的WCF服务,让客户/消费者上传图像、音频或视频文件。上传后,服务应分析文件并以某种方式检索以下属性: 图像:宽度、高度、拍摄日期、使用的程序 音频:运行时、艺术家、专辑、流派、比特率、出版年份 视频:运行时、宽度、高度、帧数/秒、视频比特率、音频比特率 显然,Windows可以很容易地获取和显示这些属性,但如何在C#?中实现这一点 我已经验证了它可以获取所有文件属性,包括扩展属性 在项目中,转到“添加引用”->COM->“Microsoft Shell控件和自动化” 再加上一个C#

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

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

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

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

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

中实现这一点

我已经验证了它可以获取所有文件属性,包括扩展属性

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

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

publicstaticvoidmain(字符串[]args)
{
List arrHeaders=新列表();
Shell=new Shell32.Shell();
Shell32.文件夹objFolder;
objFolder=shell.NameSpace(@“C:\temp\testprop”);
对于(int i=0;i
访问该信息的最简单方法是让(浏览器)Shell为您执行操作,然后(通过)请求。从C#实现这一点的最简单方法可能是使用

具体来说,您将希望获得对属性存储的访问权。有关入门帮助,请查看PropertiesEditDemo项目的Samples文件夹


您可以自己读取文件的所有元数据,但问题是您的程序必须知道所有可用文件类型的所有可用元数据。一般来说,我更喜欢挂在Shell上了解这些知识。

请注意,此解决方案在Windows XP上不起作用。从XP访问Shell32时,会出现COM异常。据我所知/经验,这在XP上运行良好。你看到了什么问题?可能是重复的
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));
        }
    }
}