Есть ли способ определить, можно ли открыть файл как System.IO.Packaging.Package?

Если у меня есть путь к файлу или поток, есть ли статический метод, который я могу использовать, чтобы определить, является ли файл / поток пакетом, кроме как попыткой использовать Package.Open на файл / поток и ловить System.IO.FileFormatException?

1 ответ

Решение

Вы можете либо попытаться открыть файл как файл.zip, а затем искать метаданные (таким образом реализуя часть спецификации пакета, где вы проверяете формат пакета), либо вы можете просто использовать Open() и поймать любое потенциальное исключение. (Форматы.docx / .xlsx / etc - это просто ZIP-файлы, которые следуют определенной структуре.)

Вы можете попробовать прочитать ZIP-заголовок, но это будет только для проверки того, что файл является ZIP-файлом - я не уверен, что это вам дорого (если что-нибудь).

Я предполагаю, что попытка открыть файл и поймать исключение - самый простой путь - если спецификация изменится, ваш код продолжит работать. Если вы свернули свой собственный код для проверки формата файла, вам придется продолжать поддерживать его.

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