Zip-архив - вручную установить последнюю измененную временную метку для локального и центрального заголовков - PullRequest
0 голосов
/ 21 марта 2019

Клиент, которому мы отправляем наши Zip-архивы, требует, чтобы временные метки для всех добавленных файловых записей были идентичны временным меткам самого Zip-архива. В дополнение к отдельным записям информация о локальном и центральном метках времени. Мы получили этот отзыв:

"Метки времени в некоторых локальных заголовках не совпадают с отметками времени в соответствующих заголовках центрального каталога"

Итак, это все новое для нас. Мы пытались манипулировать как отдельными метками даты / времени отдельных файлов, используя .SetCreationTime и .SetLastWriteTime до их добавления в Zip-архив, так и используя эти же методы для файла Zip-архива после сохранения.

Затем мы открываем Zip-архив в Winzip (v23) и используем представление «Подробная диагностика» и видим, что временная метка Zip-архива отражает нашу ручную настройку, однако добавленные файлы, по-видимому, обновляются программой Zip по мере их добавления. Мы используем Syncfusion.Compression.Zip.

Мы не видим в Syncfusion какого-либо метода для ручной установки временных отметок, которые Zip Software будет использовать до добавления записей. Мы предполагали, что он будет использовать метку времени операционной системы, но это не так. Мы знаем это, потому что во время тестирования мы специально установили нашу переменную Timestamp на год назад.

Итак, мы надеемся получить отзывы о некоторых предложениях, даже если они используют другое программное обеспечение Zip Archive, которое позволяет нам выполнять эти настройки вручную, чтобы все было синхронизировано.

1 Ответ

0 голосов
/ 21 марта 2019

Для этой цели вы можете использовать инструмент распаковки из проекта Zip-Ada с открытым исходным кодом.

  1. получить / скачать исходники
  2. сборка с помощью команды gnatmake -P zipada (вы получаете GNAT через apt или yum; для Windows есть предварительно скомпилированные двоичные файлы, или вы можете скачать GNAT с с этого сайта )
  3. теперь у вас есть бинарный архив со следующими параметрами:

.

Usage: rezip [options] archive(s)[.zip]

Options:  -defl     : repack archive only with the Deflate
                        subformat (most compatible)
          -fast_dec : repack archive only with fast decompressing subformats
          -int      : use internal Zip-Ada algorithms only, no external call
          -touch    : set time stamps to now
          -lower    : set full file names to lower case
          -del_comm : delete comment
          -comp     : compare original and repacked archives (paranoid mode)
          -rs=n     : loop many times over a single compression approach
                        having randomization, and keep optimum when size is
                        stable after n attempts in a row

Команда rezip -int -defl -touch -comp A.zip выполнит эту работу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...