2012-04-13 4 views
1

XPSファイルを処理するWinFormsアプリケーションがあります。開いているダイアログでユーザーが選択したファイルがC#を使用している有効なXPSファイルであることを確認するにはどうすればよいですか?ファイルがC#で有効なXPSファイルであることを確認するにはどうすればよいですか?

実際にXPSファイルではない拡張子.XPSのファイルが存在します。

XPSファイルは実際にはPKZIP形式であるため、PKZIPバイトシグネチャを確認できますが、これはZIPアーカイブに誤認を与えます。

+0

dup? http://stackoverflow.com/questions/3785784/how-to-validate-an-xps-document – kenny

+1

ロードする - これが唯一の方法です。 – harold

+0

@harold - そうです、それは私がしたいことです。コードサンプルがありますか?何らかの操作の後で特定の例外をチェックしますか? – DaveB

答えて

2

次は、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; 
    } 
} 
+0

ありがとうございます。よく働く。私のワークステーションからネットワーク共有上の621 MBのテストファイルをチェックするのに約33秒かかりました。私のテストで偽陽性を出さなかった。 – DaveB

-2

ファイルの拡張子ではなくファイルの種類を確認できます。

+1

そして、どのように "content type"をチェックしますか? –

+0

HttpPostedFile.ContentType check PostedFile.ContentType.ToLower()=あなたが探しているMIMEタイプです。私は拡張子と内容の両方の種類を確認します 申し訳ありませんが、これはwebではないwinformsです – Brian

+0

この記事を一見するには、http://msdn.microsoft.com/en-us/library/ms775147(v=vs。 85).aspx#introduction –

関連する問題