iPhone SDK - добавление заархивированного содержимого в ресурсы и последующее разархивирование в папку «Документы».

У меня есть некоторые ресурсы (заархивированные), которые должны быть отправлены с моим приложением для iphone. Когда приложение запускается в первый раз, этот заархивированный файл необходимо переместить / скопировать в папку «Документы» и распаковать его там. Затем пользователь может добавить другие файлы по этому пути из приложения. Может кто-нибудь подсказать, как я могу этого добиться?

Спасибо!


person Mithin    schedule 23.09.2009    source источник
comment
Один небольшой недостаток приведенных ниже методов заключается в том, что вы занимает в два раза больше места для хранения этих ресурсов; одна копия делает ваше приложение больше, а вторая копия находится в каталоге документов. Вы можете подумать, сможете ли вы жить с одной копией. Я предполагаю, что возникает вопрос, ожидаете ли вы, что эти ресурсы будут доступны для чтения / записи или только для чтения. В последнем случае я бы посоветовал вам найти способ обойти необходимость их копирования.   -  person mahboudz    schedule 23.09.2009
comment
Если только для чтения, но вы хотите, чтобы они находились в папке «Документы», потому что пользователь может добавить туда некоторые другие файлы, и вы хотите, чтобы все они были в одном месте, то я бы предложил использовать символические ссылки вместо копирования файлов.   -  person mahboudz    schedule 23.09.2009


Ответы (3)


На основании вашего комментария выше:

Причина, по которой я хочу добавить сжатый ресурс, состоит в том, что есть несколько файлов. Если я не сжимаю, мне нужно будет перемещать файлы по отдельности. Мне также нужно будет где-нибудь вести список файлов, чтобы я мог прочитать имя файла и затем переместить их. Я думал, что архивирование и разархивирование было более простым решением.

Вы можете добавить все файлы в папку в вашем пакете. Когда приложение запускается в первый раз, используйте быстрое перечисление для просмотра папки, и все, что он находит в этой папке, копируется в папку «Документы». Работа с папками внутри папок немного сложнее (возможно, добавить рекурсию). Таким образом, вам не нужно беспокоиться о zip или tar или хранить каталог с файлами для установки.

Просто поместите папку с файлами, которую вы хотите, в папку ресурсов Xcode и скажите ей импортировать как папку, а не как группу. Таким образом, файлы устанавливаются в ваши ресурсы внутри папки, а не как отдельные файлы повсюду.

РЕДАКТИРОВАТЬ:

А еще лучше, сделайте то, что я говорю, поместите все файлы, которые вы хотите, в одну папку, добавьте в свой проект, но не как «Группу», а затем при первом запуске используйте:

[[NSFileManager defaultManager] copyItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath error:(NSError **)error];

и он скопирует весь ваш каталог из одного места в другое. ЛЕГКИЙ!

person mahboudz    schedule 23.09.2009

Добавьте libz.dylib Framework в свой проект и включите NSData категорию gzip Деусти который предоставит вам методы сжатия / распаковки.

person Alex Reynolds    schedule 23.09.2009
comment
Нет необходимости распаковывать все файлы во временное хранилище, если можно распаковать отдельные файлы (в файл или, предпочтительно, в NSData) по запросу (zip-архивы сжимают исходные файлы по отдельности и сохраняют исходную иерархию папок). Не знаю хорошей совместимой с iPhone библиотеки, которая бы облегчила эту задачу. - person avocade; 08.06.2010

Хотя это доступно с помощью libz.dylib, на самом деле в этом нет необходимости, так как вы сэкономите немного места (если оно вообще есть). Пакет вашего приложения уже сжат при передаче на телефон. Сжатие поверх сжатия обычно дает небольшое дополнительное сжатие.

Попробуйте сами. Вы можете обнаружить, что доставка вашего приложения с разархивированным содержимым может занимать столько же места, сколько и заархивированное содержимое.

person coneybeare    schedule 23.09.2009
comment
Причина, по которой я хочу добавить сжатый ресурс, состоит в том, что есть несколько файлов. Если я не сжимаю, мне нужно будет перемещать файлы по отдельности. Мне также нужно будет где-нибудь вести список файлов, чтобы я мог прочитать имя файла и затем переместить их. Я думал, что архивирование и разархивирование было более простым решением. - person Mithin; 23.09.2009
comment
Вы можете использовать libtar (feep.net/libtar), если вам просто нужен способ архивировать / разархивировать и не хотят временной сложности ресурса zip-ped. - person Alex Reynolds; 23.09.2009