Как получить доступ к пакету приложения командной строки в C - PullRequest
1 голос
/ 25 марта 2010

Я на Mac, программирую с помощью Xcode. У меня есть приложение командной строки, которое будет читать / записывать файлы в своем комплекте, и мне было интересно, как получить доступ к этим файлам.

Спасибо, Мистер Ман

РЕДАКТИРОВАТЬ: было бы лучше, если бы я просто сделал папку в папке библиотеки пользователя?

Ответы [ 2 ]

3 голосов
/ 25 марта 2010

Если у вас действительно есть пакет, вы можете использовать CoreFoundation CFBundle API . Вы можете использовать CFBundleGetMainBundle() для поиска пакета вашего приложения и функции CFBundleCopy*URL() для получения URL пакета и его различных компонентов.

Однако приложения не должны писать в свои пакеты. Есть ряд вещей, которые могут пойти не так, например, текущий пользователь не имеет разрешения на запись или подписанный пакет поврежден. Как правило, ваше приложение должно помещать созданные им файлы, которые не предназначены для редактирования пользователем *, в папку ~ / Library / Application Support. Обычное место для пользовательских документов - папка «Документы».

(* Чтобы уточнить «редактируемый пользователем», я имею в виду файлы, к которым пользователь обычно должен переходить и открывать сам, а не просто как частное хранилище данных, к которым есть доступ исключительно через интерфейс вашего приложения. Так, например, документы TextEdit идут в документах, в то время как заметки Stickies идут в службу поддержки приложений.)

3 голосов
/ 25 марта 2010

Не уверен, что понимаю ваш вопрос, но если вам нужен путь одного из ваших ресурсов, вы можете использовать:

NSString *path = (NSString*)[[NSBundle mainBundle] pathForResource:@"sample" ofType:@"png"];

Если вам нужен каталог приложения, вы можете использовать:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [[paths objectAtIndex:0] retain];

или

NSArray *resPaths = NSSearchPathForDirectoriesInDomains(NSApplicationDirectory, NSUserDomainMask, YES);
NSString *resourceDirectory = [[resPaths objectAtIndex:0] retain];

Я сейчас не на своем Mac, поэтому я просто вставляю из нашего фреймворка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...