私が今やったこと、そしてどれがうまくいくかはこれです:
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ファイルの署名に近く、OpenXMLを開くこともできますzipプログラムを使用してファイルを作成し、その内容を確認します。そして、これが私が目指すべき解決策かもしれません。OpenXMLSDKをより速く/より簡単に使用できること、そしてそれをチェックできるプロパティなどがあることを望んでいました。
編集:私は答えを追加しました、それが私の現在の目的のために働くとしても、私はまだより良い解決策があったかどうかを見たいです。拡張機能がテンプレートファイルである必要があることは考慮されていません。