XPS ファイルを処理する WinForms アプリケーションがあります。C# を使用して、ユーザーが開くダイアログで選択したファイルが有効な XPS ファイルであることを確認するにはどうすればよいですか?
実際には XPS ファイルではない .XPS 拡張子を持つファイルが存在します。
XPS ファイルは実際には PKZIP 形式であるため、PKZIP バイト署名を確認できましたが、ZIP アーカイブで誤検出が発生します。
以下は、XPS ファイルを他の ZIP アーカイブおよび非 ZIP ファイルと区別します。ファイルが完全に有効な XPS であるかどうかは判断できません。そのためには、各ページを読み込む必要があります。
using System;
using System.IO;
using System.Windows.Xps.Packaging;
class Tester
{
public static bool IsXps(string filename)
{
try
{
XpsDocument x = new XpsDocument(filename, FileAccess.Read);
IXpsFixedDocumentSequenceReader fdsr = x.FixedDocumentSequenceReader;
// Needed to actually try to find the FixedDocumentSequence
Uri uri = fdsr.Uri;
return true;
}
catch (Exception)
{
}
return false;
}
}
ファイル拡張子の代わりに、ファイルのコンテンツ タイプを確認できます。