Вопрос по c# – Как я могу проверить, что файл является действительным файлом XPS с C #?

1

У меня есть приложение WinForms, которое обрабатывает файлы XPS. Как я могу проверить, что файл, выбранный пользователем в открытом диалоговом окне, является допустимым файлом XPS с использованием C #?

Будут присутствовать файлы с расширением .XPS, которые на самом деле не являются файлами XPS.

Поскольку XPS-файлы действительно имеют формат PKZIP, я мог бы проверить байтовую подпись PKZIP, но это дало бы ложные срабатывания в ZIP-архивах.

@ Гарольд - Да, это то, что я хочу сделать. У вас есть пример кода? Проверять ли определенное исключение после некоторой операции? DaveB
Dup?stackoverflow.com/questions/3785784/… kenny
Загрузите его - это единственный способ быть уверенным. harold
@kenny Я не хочу использовать внешний инструмент. DaveB

Ваш Ответ

2   ответа
2

ов. Он не определит, является ли файл полностью допустимым 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 МБ на общем сетевом ресурсе с моей рабочей станции. Не дал никаких ложных срабатываний в моем тестировании. DaveB
-2

И как вы проверяете этот & quot; Тип контента & quot; ?
Это приложение WinForms. Нет ContentType для проверки. Там нет загруженного файла. DaveB
HttpPostedFile.ContentType check PostedFile.ContentType.ToLower () = любой тип пантомимы, который вы ищете. Я бы проверил как расширение, так и тип контента. Извините, только что увидел, что это winforms, а не web.
Я нашел эту статью, но я еще не тестировал ее,codeproject.com/Articles/6871/…
взгляните на эту статью,msdn.microsoft.com/en-us/library/…

Похожие вопросы