Невозможно сделать fopen при использовании NSTask для запуска исполняемого файла

Что я хочу сделать

Чтобы запустить исполняемый «сервер» из моего приложения Cocoa. Исполняемый файл уже может отлично работать при вызове в терминале и будет читать текстовый файл в том же каталоге.

Что я наделал

Поместите «сервер» и другие файлы в папку «Поддерживающие файлы» в Xcode. Используйте NSTask для запуска «сервера»:

NSString *path = [[NSBundle mainBundle] pathForResource:@"server" ofType:nil];
NSArray *args = [[NSArray alloc] init];
[NSTask launchedTaskWithLaunchPath:path arguments:args];

Ошибка

Исполняемому файлу не удалось открыть текстовый файл. В частности, функция C fopen("tradingbook_closing.txt", "r") в исходном коде не смогла открыть файл. Но файл был там, и запуск исполняемого файла непосредственно в терминале проходит без нареканий. И приложение не изолировано. Может ли кто-нибудь найти, что пошло не так?

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


person Khylnn Wu    schedule 03.01.2015    source источник


Ответы (1)


Вы используете относительный путь к файлу "tradingbook_closing.txt", который зависит от текущего каталога процесса, содержащего этот файл. Это, вероятно, причина вашей ошибки.

Лучше не прописывать относительные пути в программу, но если необходимо, вы можете установить текущий каталог процесса, запущенного NSTask, используя свойство currentDirectoryPath. Вам потребуется создать экземпляр NSTask, а не использовать метод класса launchedTaskWithLaunchPath:arguments:, а затем установить свойства launchPath, arguments и currentDirectoryPath перед вызовом метода launch.

person CRD    schedule 03.01.2015
comment
Невероятный совет. [task setCurrentDirectoryPath:dirPath] исправить все это дело. Большое спасибо вам! - person Khylnn Wu; 03.01.2015