Какой лучший способ быстро создать CAB-файл из нескольких файлов?

Я хотел бы сделать файл.cab из нескольких файлов. Любое учебное пособие или руководство, с которым я столкнулся, полезно только для нескольких файлов.

4 ответа

Решение

Согласно Википедии:

Формат файла CAB может использовать следующие алгоритмы сжатия:

  • DEFLATE - изобретен Филом Кацем, автором формата ZIP файла
  • Квантовое сжатие - по лицензии Дэвида Стаффорда, автора архиватора Quantum
  • LZX - изобретенный Джонатаном Форбсом и Томи Путаненом, подаренный Microsoft, когда Форбс присоединился к компании

Таким образом, любой.zip-компрессор должен открывать файл, даже тот, который является родным для всех последних версий Windows.

Однако, как указывается в статье, существует несколько архиваторов, которые создают файлы.cab из-за их формата. Согласно следующему списку эти программы могут записывать файлы.cab:

  • ZipGenius
  • ALZip
  • IZArc
  • PowerArchiver
  • TUGZip
  • WinAce

Вы можете использовать встроенную команду Windows makecab но сначала вам нужно создать список файлов.

dir C:\FolderName /s /b /a-d > c:\temp\files.txt

Это перечислит все файлы в каталоге C:\FolderName и сохранит их в виде текстового файла с полным путем. Теперь мы собираемся использовать файл files.txt для создания cab-файла.

makecab /d CabinetName1=test.cab /D DiskDirectoryTemplate=C:\temp /f c:\temp\files.txt

Приведенная выше команда создаст файл test.cab в вашей папке C:\Temp, используя список файлов, созданный ранее.

Дополнительная полезная ссылка: справочник Microsoft Cabinet. и makecab.exe подробности.

«Один CAB-файл можно использовать для хранения максимум 65535 файлов общим размером до 1,99 ГиБ. Чтобы сжать несколько файлов в один CAB-файл, используйте файл директив, содержащий список файлов для сжатия и упаковки. "

Файл директивы (list.txt):

      .Set CabinetNameTemplate=Out.cab;
.Set Cabinet=on;
.Set Compress=off;
.Set DiskDirectoryTemplate=;
file1
file2
file3
.etc

При желании включите сжатие ( для экономии места), затем введите команду в cmd:

      makecab /f list.txt

Чтобы создать самораспаковывающийся архив:

      copy /b "%windir%\system32\extrac32.exe"+"Out.cab" CABfiles.exe

Проверено на Win 10 CMD.

Вам нужно обновить или восстановить файл CAB, возможно, заменить один файл в существующем CAB, сохранив при этом структуру папок в CAB? Это то, что мне нужно было сделать. Быстрое исследование не выявило простого способа обновления существующего CAB с помощью 7Zip или WinZip. Я нашел путь к успеху, регенерировав новый CAB-файл, такой же, как старый CAB-файл, за исключением нескольких измененных файлов.

Инструмент, который делает это, представляет собой графический интерфейс утилиты MakeCab. MakeCab с помощью правильной командной строки создаст CAB-файл из всех файлов в папке.
Загрузите MakeCab здесь:

Рабочий процесс создания обновленного CAB-файла:

  1. Откройте командную строку и используйте команду «Развернуть», чтобы извлечь файлы из существующего CAB-файла в структуру папок.

развернуть -F:* \MyServer\ServerMigration2020\ExportedConfigurationSourceFiles\MyOriginalCABFile.cab \MyServer\CaptureSV\ServerMigration2020\Cabfiles\CabSourceFiles

Эта команда «Развернуть» извлекает все файлы из исходного CAB-файла и помещает их в папку CabSourceFiles, сохраняя структуру папок.

  1. Вносите любые обновления в извлеченные файлы и папки. В моем случае был один файл XML, который я заменил в структуре папок.

  2. Запустите графический интерфейс CabMaker, чтобы создать обновленный CAB-файл. Обратите внимание, что это работает для «простого» CAB-файла, состоящего только из файлов и папок, а не для CAB-файла «установщика», который имеет дополнительные заголовки и например является частью набора файлов установщика.

Хорошо, как получить и использовать инструмент CabMaker?
Загрузите его здесь: https://github.com/sapientcoder/CabMaker .https://github.com/sapientcoder/CabMaker . Я просто скачал код C# CabMaker с GitHub и запустил его в Visual Studio 2019 без каких-либо изменений.

Графический интерфейс CabMaker появился сразу. Я ввел исходную папку (выходную папку в команде «Развернуть») и целевую папку (куда помещается полученный CAB-файл), а также желаемое имя CAB-файла, нажал кнопку «Создать CAB», и все запустилось. Полученный CAB-файл работал прекрасно, был успешно импортирован в приложение и привел к правильно установленной конфигурации.

Хорошо, тогда зачем мне нужно было создавать CAB-файл? Итак, мы переносили приложение поставщика со старого сервера на новый сервер и использовали функцию «экспорта» приложения для захвата файлов конфигурации текущего состояния, которые мы могли «импортировать» в приложение на новом сервере. Альтернативой было использование неуклюжего графического интерфейса пользовательского приложения для ручной навигации и внесения пары сотен изменений в имена файлов и папок, которые изменились. Я решил, что будет лучше внести изменения в файлы и папки в XML-файл внутри CAB, в котором хранятся все настройки. В день отключения сервера все сложилось прекрасно; иногда нам везет. Огромное спасибо участнику GitHub SapientCoder!

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