目前我所做的,并且起作用的是这个:
private string DetermineOpenXML(string file)
{
try
{
SpreadsheetDocument doc = SpreadsheetDocument.Open(file, false);
doc.Close();
return ".xslx";
}
catch
{
try
{
WordprocessingDocument doc = WordprocessingDocument.Open(file, false);
doc.Close();
return ".docx";
}
catch
{
try
{
PresentationDocument doc = PresentationDocument.Open(file, false);
doc.Close();
return ".pptx";
}
catch
{
return string.Empty;
}
}
}
}
我认为除了试错之外,还应该有更好的方法来确定文件类型。我正在开发一个小程序,用于查找文件应该具有的扩展名。这是因为我从数据库中获取的文件有时没有扩展名,有时又有错误的扩展名。
我已经找到了所有OpenXML文档共享的文件签名:"50 4B 03 04 14 00 06 00",它接近于zip文件的签名,我也可以使用zip程序打开OpenXML文件并查看其内容。也许这就是我应该采取的解决方案,但我希望能更快速/更容易地使用OpenXML SDK,并且它是否有属性或其他东西可以为我检查它。
编辑: 我已经添加了一个答案,尽管它适用于我的当前目的,但我仍希望看到是否有更好的解决方案。它没有考虑到扩展名应该是模板文件。