Рабочий каталог в Objective-C и Xcode: режим отладки и исполняемый файл - PullRequest
1 голос
/ 16 февраля 2011

Я пишу программу на Objective-C с использованием Xcode. Моя программа создает файл следующим образом:

[@"" writeToFile:fileName atomically:YES encoding:NSUTF8StringEncoding error:NULL];

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

Однако, когда я запускаю файл .app, файл создается в корневом каталоге. Как получить программу для создания файла в каталоге, где находится файл .app?

Большое спасибо.

РЕДАКТИРОВАТЬ: Это приложение MacOS

EDIT2: Похоже, мне не следует писать в каталог .app. Спасибо bbum и Полу Р. Как правильно это сделать? Чтобы быть более конкретным, вот что я делаю: каждый раз, когда пользователь нажимает кнопку в приложении, часть оборудования, подключенного к последовательному порту, будет отправлять данные, которые будут записаны в новый файл. Это может происходить любое количество раз во время работы приложения, поэтому может быть создано множество файлов. Я хотел бы, чтобы все они были созданы в одной папке.

Ответы [ 2 ]

2 голосов
/ 16 февраля 2011

Вы должны никогда делать какие-либо предположения о начальном рабочем каталоге вашего приложения, поскольку это будет зависеть от того, какой метод использовался для его запуска (например, Finder, Terminal (через open), Xcode,GDB, сторонние утилиты и т. д.).Вы должны использовать соответствующий API, чтобы найти подходящий каталог для хранения временных файлов или пользовательских файлов или всего, что вам нужно сделать.Это никогда не должно быть в пакете приложения и никогда по пути, который относительно начального рабочего каталога.

1 голос
/ 16 февраля 2011

Вы не хотите, чтобы файл создавался внутри оболочки .app. Это никогда правильный ответ; Ваше приложение может быть легко установлено где-то, где у текущего пользователя нет прав на запись в оболочку YourApp.app.

(Например, моя основная учетная запись пользователя не-admin, и все приложения устанавливаются только для записи с правами администратора. Если приложение перестает работать из-за невозможности записи в оболочку приложения, оно попадает в корзину .)

См. Этот вопрос , чтобы узнать, где следует хранить файлы. Зависит от роли файла.

...