Как я могу проверить, что файл является допустимым файлом 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;
    }
}

Вы можете проверить тип содержимого файла вместо расширения файла.

Другие вопросы по тегам