Что хороший путь состоит в том, чтобы протестировать файл, чтобы видеть, является ли это zip-файл?

Для ссылки вот простая реализация Шаблона "команда" для Отмены/Восстановления в C#: Простая система отмены/восстановления для C#.

12
задан Dan Hook 11 December 2009 в 14:06
поделиться

9 ответов

Формат файла zip определяется PKWARE. Вы можете найти спецификацию их файлов здесь .

Вверху вы найдете спецификацию заголовка:

A. Заголовок локального файла:

  подпись заголовка локального файла 4 байта (0x04034b50)
 версия, необходимая для извлечения 2 байтов
 битовый флаг общего назначения 2 байта
 метод сжатия 2 байта
 время последнего файла мода 2 байта
 дата последнего файла мода 2 байта
 crc-32 4 байта
 сжатый размер 4 байта
 несжатый размер 4 байта
 длина имени файла 2 байта
 длина дополнительного поля 2 байта

 имя файла (размер переменной)
 дополнительное поле (переменный размер)

Из этого видно, что первые 4 байта заголовка должны быть подписью файла, которая должна иметь шестнадцатеричное значение 0x04034b50. Порядок байтов в файле обратный - PKWARE указывает, что «Все значения сохраняются в порядке байтов с прямым порядком байтов, если не указано иное», поэтому, если вы используете шестнадцатеричный редактор для просмотра файла, вы увидите 50 4b 03 04 как первые 4 байта.

Вы можете использовать это, чтобы проверить, является ли ваш файл zip-файлом. Если вы откроете файл в блокноте, вы заметите, что первые два байта (50 и 4b) - это символы ASCII PK.

19
ответ дан 2 December 2019 в 04:09
поделиться

Вы можете посмотреть магический номер файла. Архивы ZIP перечислены на странице википедии формата ZIP : PK \ 003 \ 004 или PK \ 005 \ 006 .

12
ответ дан 2 December 2019 в 04:09
поделиться

Проверьте первые несколько байтов файла на наличие магического числа . Zip-файлы начинаются с PK (50 4B). Поскольку файлы XML не могут начинаться с этих символов и оставаться действительными, вы можете быть уверены в типе файла.

1
ответ дан 2 December 2019 в 04:09
поделиться

Не очень хорошее решение, но просто подумайте о загрузке ... как насчет:

try
{
LoadXmlFile(theFile);//Exception if not an xml file
}
catch(Exception ex)
{
LoadZipFile(theFile)
}
1
ответ дан 2 December 2019 в 04:09
поделиться

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

1
ответ дан 2 December 2019 в 04:09
поделиться

Магические числа файла

Для пояснения, он начинается с 50 4b 03 04.

См. http://www.pkware.com/documents/casestudies/APPNOTE. TXT (от Саймона П. Стивенса)

1
ответ дан 2 December 2019 в 04:09
поделиться

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

См. Щелкните здесь для спецификации XML.

1
ответ дан 2 December 2019 в 04:09
поделиться

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

0
ответ дан 2 December 2019 в 04:09
поделиться

it depends on what you are using but the zip library might have a function that test wether a file or not is a zip file что-то вроде is_zip, test_file_zip или что-то в этом роде ...

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

0
ответ дан 2 December 2019 в 04:09
поделиться
Другие вопросы по тегам:

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