Objective c Can';在使用NSTask运行可执行文件时,不要执行fopen 我想做什么

Objective c Can';在使用NSTask运行可执行文件时,不要执行fopen 我想做什么,objective-c,cocoa,fopen,nstask,Objective C,Cocoa,Fopen,Nstask,从我的Cocoa应用程序运行可执行的“服务器”。当在终端中调用时,可执行文件已经可以完美运行,并且将读取同一目录中的文本文件 我所做的 将“服务器”和其他文件放在Xcode的“支持文件”文件夹中。使用NSTask运行“服务器”: 错误 可执行文件无法打开文本文件。具体来说,源代码中的C函数fopen(“tradingbook\u closing.txt”,“r”)无法打开该文件。但是文件就在那里,在终端上直接运行可执行文件是完美的。而且应用程序没有沙盒。谁能找到哪里出了问题 非常感谢。您正在使用

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

我所做的 将“服务器”和其他文件放在Xcode的“支持文件”文件夹中。使用NSTask运行“服务器”:

错误 可执行文件无法打开文本文件。具体来说,源代码中的C函数
fopen(“tradingbook\u closing.txt”,“r”)
无法打开该文件。但是文件就在那里,在终端上直接运行可执行文件是完美的。而且应用程序没有沙盒。谁能找到哪里出了问题

非常感谢。

您正在使用文件的相对路径,
“tradingbook\u closing.txt”
,该文件依赖于当前目录,进程将成为包含该文件的进程。这可能是您的错误的原因


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

难以置信的建议<代码>[task setCurrentDirectoryPath:dirPath]修复整个问题。非常感谢你!
NSString *path = [[NSBundle mainBundle] pathForResource:@"server" ofType:nil];
NSArray *args = [[NSArray alloc] init];
[NSTask launchedTaskWithLaunchPath:path arguments:args];