Objective-C和Xcode中的工作目录:调试模式与可执行文件

时间:2011-02-16 18:08:50

标签: objective-c xcode working-directory

我正在使用Xcode在Objective-C中编写一个程序。我的程序创建一个文件如下:

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

我希望在与可执行文件相同的目录中创建该文件。当我从Xcode运行程序时,文件在调试目录中按预期创建。

但是,当我运行.app文件时,该文件将在根目录中创建。如何让程序在.app文件所在的目录中创建文件。

非常感谢。

编辑:这是一个MacOS应用程序

EDIT2:好吧,我似乎不应该写入.app目录。感谢bbum和Paul R.这样做的正确方法是什么?更具体地说,这就是我正在做的事情:每次用户点击应用程序中的按钮时,连接到串行端口的硬件将发送一堆数据,这些数据将被写入新文件。在应用程序运行时,这可能会发生任意次,因此可能会创建大量文件。我希望他们都在同一个文件夹中创建。

2 个答案:

答案 0 :(得分:2)

您必须从不对您的应用程序的初始工作目录做出任何假设,因为这取决于启动它的方法(例如Finder,终端(通过open)) ,Xcode,gdb,第三方实用程序等)。您应该使用适当的API来查找合适的目录来存储临时文件或用户特定的文件,或者您需要做什么。这绝不应该在应用程序的包中,也不应该在相对于初始工作目录的路径中。

答案 1 :(得分:1)

希望在.app包装器中创建文件。那是永远正确的答案;您的应用程序可以轻松安装在当前用户对YourApp.app包装器没有写入权限的地方。

(例如,我的主要用户帐户是非管理员,所有应用程序都安装了admin-write-only。如果某个应用程序无法正常工作,因为它无法写入其应用程序包装器,则该应用程序会进入垃圾箱。)

See this question,了解应存储文件的位置。取决于文件的作用。