使用NSTask运行可执行文件时不能执行fopen

时间:2015-01-03 02:29:45

标签: objective-c cocoa fopen nstask

我想做什么

从我的Cocoa应用程序运行可执行文件“server”。在终端中调用时,可执行文件已经可以完美运行,并且将读取同一目录中的文本文件。

我做了什么

将“server”和其他文件放在Xcode的“Supporting Files”文件夹中。使用NSTask运行“server”:

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

错误

可执行文件无法打开文本文件。具体来说,源代码中的C函数fopen("tradingbook_closing.txt", "r")无法打开该文件。但文件在那里,并在终端中运行可执行文件直接完美无缺。该应用程序不是沙盒。有人能找到问题吗?

非常感谢。

1 个答案:

答案 0 :(得分:2)

您正在为文件"tradingbook_closing.txt"使用相对路径,该路径依赖于当前目录,该进程将包含该文件。这可能是导致错误的原因。

最好不要将相对路径硬连接到程序中,但如果必须,可以使用NSTask属性设置currentDirectoryPath启动的进程的当前目录。您需要创建NSTask实例,而不是使用类方法launchedTaskWithLaunchPath:arguments:,然后在调用之前设置launchPathargumentscurrentDirectoryPath属性launch方法。