我有一個處理XPS文件的WinForms應用程序。如何檢查用戶在打開的對話框中選擇的文件是否是使用C#的有效XPS文件?如何使用C#檢查文件是否爲有效的XPS文件?
將存在與.XPS擴展名不是真正的XPS文件的文件。
由於XPS文件確實是PKZIP格式,因此我可以檢查PKZIP字節簽名,但這會給ZIP歸檔帶來誤報。
我有一個處理XPS文件的WinForms應用程序。如何檢查用戶在打開的對話框中選擇的文件是否是使用C#的有效XPS文件?如何使用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;
}
}
非常感謝。很棒。花了大約33秒來檢查我的工作站上的網絡共享上的621 MB測試文件。在我的測試中沒有給出任何誤報。 – DaveB 2012-04-17 16:24:44
您可以檢查文件的內容類型而不是文件擴展名。
你如何檢查「內容類型」? – 2012-04-13 17:17:05
HttpPostedFile.ContentType 檢查PostedFile.ContentType.ToLower()= whaterver MIME類型您正在尋找。我會檢查擴展名和內容類型 對不起,只是看到,這是winforms不是網絡 – Brian 2012-04-13 17:19:58
看一眼這篇文章,http://msdn.microsoft.com/en-us/library/ms775147(v=vs。 85).aspx#介紹 – 2012-04-13 17:20:43
dup? http://stackoverflow.com/questions/3785784/how-to-validate-an-xps-document – kenny 2012-04-13 17:11:51
加載它 - 這是確保唯一的方法。 – harold 2012-04-13 17:16:00
@harold - 是的,這就是我想要做的。你有代碼示例嗎?在進行一些操作後是否檢查特定異常? – DaveB 2012-04-13 17:21:22