Как я могу проверить, что файл является допустимым файлом XPS с C#?
У меня есть приложение WinForms, которое обрабатывает файлы XPS. Как я могу проверить, что файл, выбранный пользователем в открытом диалоговом окне, является допустимым файлом XPS с использованием C#?
Будут присутствовать файлы с расширением.XPS, которые на самом деле не являются файлами XPS.
Поскольку файлы XPS действительно имеют формат PKZIP, я мог бы проверить байтовую подпись PKZIP, но это дало бы ложные срабатывания в ZIP-архивах.
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;
}
}
Вы можете проверить тип содержимого файла вместо расширения файла.