假设我有一个允许用户上传任何类型文件的程序。除了获取文件类型和文件大小等通用信息外,我还想尝试获取可能随文档一起传输的任何额外信息(如文档属性,如作者,最新修订版等)。
由于我对提交的文档/文件没有任何了解,因此我不能简单地使用特定于Microsoft Office文档的类。我需要一般性地执行此操作,然后构造一个动态对象或字典来保存任何找到的键/值结果。
这可能吗?如果是这样,怎么样?任何帮助表示赞赏!
答案 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;
}