0

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

由于我事先对传入的文档/文件一无所知,因此我不能简单地使用特定于 Microsoft Office 文档的类。我需要一般地执行此操作,然后构造一个动态对象或字典来保存任何找到的键/值结果。

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

4

1 回答 1

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;
        } 
于 2013-05-26T23:36:04.630 回答