使用C#,如何确定上载的文件是否具有任何可访问的元数据/文档属性?

时间:2013-05-26 20:36:10

标签: c# metadata ms-office document openoffice.org

假设我有一个允许用户上传任何类型文件的程序。除了获取文件类型和文件大小等通用信息外,我还想尝试获取可能随文档一起传输的任何额外信息(如文档属性,如作者,最新修订版等)。

由于我对提交的文档/文件没有任何了解,因此我不能简单地使用特定于Microsoft Office文档的类。我需要一般性地执行此操作,然后构造一个动态对象或字典来保存任何找到的键/值结果。

这可能吗?如果是这样,怎么样?任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:0)

我在StackOverflow上找到了一些答案,但没有一个给我一个漂亮,干净的文档属性字典。这是我最终提出的并且似乎工作得很好(您需要从COM文件夹中引用“Microsoft Shell Controls and Automation”并将using Shell32;添加到您的代码中:

 public static Dictionary<string,string> GetDocumentMetadata(string fileName)
        {
            var properties = new Dictionary<string,string>();
            var arrHeaders = new List<string>();

            var shell = new Shell();
            var objFolder = shell.NameSpace(HttpContext.Current.Server.MapPath("~/RawFiles"));
            var file = objFolder.ParseName(fileName);

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

            for (var i = 0; i < arrHeaders.Count; i++)
            {
                var value = objFolder.GetDetailsOf(file, i);
                if (!String.IsNullOrEmpty(value))
                {
                    properties.Add(arrHeaders[i], value);
                }
            }

            return properties;
        }