Для ссылки вот простая реализация Шаблона "команда" для Отмены/Восстановления в C#: Простая система отмены/восстановления для C#.
Формат файла 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.
Вы можете посмотреть магический номер файла. Архивы ZIP перечислены на странице википедии формата ZIP : PK \ 003 \ 004 или PK \ 005 \ 006
.
Проверьте первые несколько байтов файла на наличие магического числа . Zip-файлы начинаются с PK (50 4B). Поскольку файлы XML не могут начинаться с этих символов и оставаться действительными, вы можете быть уверены в типе файла.
Не очень хорошее решение, но просто подумайте о загрузке ... как насчет:
try
{
LoadXmlFile(theFile);//Exception if not an xml file
}
catch(Exception ex)
{
LoadZipFile(theFile)
}
Вы можете использовать файл , чтобы узнать, является ли это текстовым файлом (xml) или исполняемым файлом (zip). Прокрутите вниз, чтобы увидеть пример.
Для пояснения, он начинается с 50 4b 03 04.
См. http://www.pkware.com/documents/casestudies/APPNOTE. TXT (от Саймона П. Стивенса)
Вы можете проверьте файл, чтобы убедиться, что он содержит допустимый заголовок XML. Если это не так, попробуйте распаковать его.
Вы можете попробовать разархивировать его - XML-файл вряд ли будет действительным zip-файлом или может проверить магические числа, как говорили другие.
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 или что-то в этом роде ...
или создайте свою собственную функцию, используя указанное выше магическое число.