2012-04-13 26 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 2012-04-13 17:11:51

+1

加載它 - 這是確保唯一的方法。 – harold 2012-04-13 17:16:00

+0

@harold - 是的,這就是我想要做的。你有代碼示例嗎?在進行一些操作後是否檢查特定異常? – DaveB 2012-04-13 17:21:22

回答

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

非常感謝。很棒。花了大約33秒來檢查我的工作站上的網絡共享上的621 MB測試文件。在我的測試中沒有給出任何誤報。 – DaveB 2012-04-17 16:24:44

-2

您可以檢查文件的內容類型而不是文件擴展名。

+1

你如何檢查「內容類型」? – 2012-04-13 17:17:05

+0

HttpPostedFile.ContentType 檢查PostedFile.ContentType.ToLower()= whaterver MIME類型您正在尋找。我會檢查擴展名和內容類型 對不起,只是看到,這是winforms不是網絡 – Brian 2012-04-13 17:19:58

+0

看一眼這篇文章,http://msdn.microsoft.com/en-us/library/ms775147(v=vs。 85).aspx#介紹 – 2012-04-13 17:20:43

相關問題