Создание файлового пакета в OSX - PullRequest
4 голосов
/ 29 мая 2011

Для приложения я хотел бы сохранить коллекцию файлов вместе и сделать так, чтобы они отображались в файловой системе как один файл, поэтому им легко управлять. В настоящее время я храню все в папке.

Я бы хотел, чтобы все было доступно, чтобы вы могли вручную редактировать внутреннее содержимое, если это необходимо.

Один из способов сделать это - создать zip-архив и присвоить ему собственное расширение, отличное от .zip. Затем он отображается как тип файла, и при необходимости вы можете распаковать и получить доступ к содержимому, но для обычного использования сохраните его скрытым.

Кажется, я не могу найти удобный способ сделать это. Boost и zlib могут выполнять сжатие, но не работают с архивами. Я нашел libzip, но мне трудно понять, как его использовать, и мне кажется, что он только читает / записывает zip-архивы без фактического сжатия.

Есть ли более удобный способ решения этой проблемы?

Можете ли вы вызывать системные функции для создания архива на OSX из c ++ / Carbon?

Есть ли другой способ, чтобы папка отображалась как один файл?

Ответы [ 2 ]

5 голосов
/ 29 мая 2011

В OSX вы можете создавать Пакеты документов (аналогично пакетам приложений), которые в Finder обрабатываются как один файл, но на самом деле являются просто каталогами с некоторой внутренней структурой.

Apple не архивирует эти пакеты, но они предоставляют описанные вами функции, и их можно создавать и получать к ним доступ через CoreFoundation с помощью CFBundleRef .

Из документации:

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

3 голосов
/ 29 мая 2011

В качестве первого шага просто переименуйте папку и добавьте расширение .bundle, например. Myappdir.bundle

Это покажет всю папку в виде одного файла со значком, похожим на лего.

Следующим шагом вы должны создать внутри один файл Info.plist.

...