2012-04-13 4 views
1

XPS 파일을 처리하는 WinForms 응용 프로그램이 있습니다. 열려있는 대화 상자에서 사용자가 선택한 파일이 C#을 사용하는 유효한 XPS 파일인지 어떻게 확인할 수 있습니까?파일이 C#으로 유효한 XPS 파일인지 어떻게 확인할 수 있습니까?

실제로 XPS 파일이 아닌 .XPS 확장자가있는 파일이 있습니다.

XPS 파일은 실제로 PKZIP 형식이므로 PKZIP 바이트 서명을 확인할 수는 있지만 ZIP 아카이브에 오판 (false positives)이 있습니다.

+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

감사합니다. 훌륭하게 작동합니다. 내 워크 스테이션에서 네트워크 공유에있는 621MB 테스트 파일을 확인하는 데 약 33 초가 걸렸습니다. 내 테스트에 오판을주지 않았다. – DaveB

-2

파일 확장자 대신 파일의 내용 유형을 확인할 수 있습니다.

+1

그리고 어떻게 "content type"을 확인합니까? –

+0

HttpPostedFile.ContentType check PostedFile.ContentType.ToLower() = 찾고있는 MIME 유형입니다. 확장 기능과 콘텐츠 유형을 모두 확인합니다. 죄송합니다.이 웹은 winforms가 아닌 것을 보았습니다 – Brian

+0

이 기사는 http://msdn.microsoft.com/en-us/library/ms775147(v=vs. 85) .aspx # 소개 –

관련 문제