Создание файлового пакета в OSX
Для приложения я хотел бы сохранить коллекцию файлов вместе и сделать так, чтобы они отображались в файловой системе как один файл, поэтому им легко управлять. В настоящее время я храню все в папке.
Я хотел бы, чтобы все было доступно, чтобы вы могли вручную редактировать внутреннее содержимое, если это необходимо.
Один из способов сделать это - создать zip-архив и присвоить ему собственное расширение, отличное от.zip. Затем он отображается как тип файла, и при необходимости вы можете распаковать и получить доступ к содержимому, но для обычного использования сохраните его скрытым.
Я не могу найти удобный способ сделать это. Boost и zlib могут выполнять сжатие, но не работают с архивами. Я нашел libzip, но мне трудно понять, как его использовать, и мне кажется, что он только читает / записывает zip-архивы без фактического сжатия.
Есть ли более удобный способ справиться с этим?
Можете ли вы вызвать системные функции для создания архива на OSX из C++ / Carbon?
Есть ли другой способ, чтобы папка отображалась как один файл?
2 ответа
В OSX вы можете создавать пакеты документов (аналогично пакетам приложений), которые в Finder обрабатываются как один файл, но на самом деле являются просто каталогами с некоторой внутренней структурой.
Apple не архивирует эти пакеты, но они предоставляют описанные вами функции, и их можно создавать и получать к ним доступ через CoreFoundation с помощью CFBundleRef.
Из документации:
... При создании пакета документов важно помнить, что это всего лишь каталог. Пока тип пакета документов зарегистрирован (как описано в разделе "Регистрация типа документа"), все, что вам нужно сделать, это создать каталог с соответствующим расширением имени файла. (Средство поиска использует расширение имени файла в качестве своей подсказки для обработки каталога как пакета.) Вы можете создать каталог (и создать любые файлы, которые вы хотите поместить в этот каталог), используя стандартные процедуры файловой системы BSD...
В качестве первого шага просто переименуйте папку и добавьте расширение .bundle
Например, Myappdir.bundle
Это покажет всю папку в виде одного файла со значком, похожим на лего.
Следующим шагом вы должны создать один файл Info.plist внутри.