Какой лучший способ быстро создать 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-файла:
- Откройте командную строку и используйте команду «Развернуть», чтобы извлечь файлы из существующего CAB-файла в структуру папок.
развернуть -F:* \MyServer\ServerMigration2020\ExportedConfigurationSourceFiles\MyOriginalCABFile.cab \MyServer\CaptureSV\ServerMigration2020\Cabfiles\CabSourceFiles
Эта команда «Развернуть» извлекает все файлы из исходного CAB-файла и помещает их в папку CabSourceFiles, сохраняя структуру папок.
Вносите любые обновления в извлеченные файлы и папки. В моем случае был один файл XML, который я заменил в структуре папок.
Запустите графический интерфейс 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!