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