Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在C+中正确使用文件I/O路径+;OSX中的应用?_C++_Xcode_Macos_Io_Relative Path - Fatal编程技术网

C++ 如何在C+中正确使用文件I/O路径+;OSX中的应用?

C++ 如何在C+中正确使用文件I/O路径+;OSX中的应用?,c++,xcode,macos,io,relative-path,C++,Xcode,Macos,Io,Relative Path,我几乎没有OSX编程方面的专业知识。我正在开发一个基于SigLITE的2D游戏,使用C++。我的代码最初是为VisualStudio编写的,现在已移植到OSX 在Windows环境中,所有I/O操作(例如加载精灵工作表)都是使用当前.exe目录中的相对路径完成的。但是,在OSX环境中,编译的程序在不同的目录上执行,因此会崩溃。从XCode执行时,它可以完美地工作(因为它不会更改执行目录) Xcode设置为控制台应用程序 我的问题是:有没有办法将程序设置为在正确的目录下执行?由于这个程序将被分发,

我几乎没有OSX编程方面的专业知识。我正在开发一个基于SigLITE的2D游戏,使用C++。我的代码最初是为VisualStudio编写的,现在已移植到OSX

在Windows环境中,所有I/O操作(例如加载精灵工作表)都是使用当前.exe目录中的相对路径完成的。但是,在OSX环境中,编译的程序在不同的目录上执行,因此会崩溃。从XCode执行时,它可以完美地工作(因为它不会更改执行目录)

Xcode设置为控制台应用程序

我的问题是:有没有办法将程序设置为在正确的目录下执行?由于这个程序将被分发,我希望在不需要安装的情况下尽可能隐藏程序文件


提前感谢

首先,让程序依赖于可执行文件的查找位置是个坏主意。最好在命令行或类似的地方传递一个指向配置文件的指针,并让配置文件说明所有数据的位置。通过这种方式,您可以轻松地将可执行文件和数据安装到每个操作系统上最合适的位置

但是,要回答您的问题,首先要找到exe所在的目录,然后将工作目录更改为该目录。像这样:

char pathbuf[PATH_MAX + 1];
int  bufsize = sizeof(pathbuf);

_NSGetExecutablePath( pathbuf, &bufsize);

chdir( pathbuf );
为简洁起见,省略了错误检查,但建议使用。您需要包括:

#include <mach-o/dyld.h>
#包括

最好找到资源文件的根路径,然后使用它来使用绝对路径-但是,在OSX中,也应该在Windows中,安装中的任何只读文件和写入的任何文件都将位于不同的位置。对于OSX,请看苹果对快速回复的感谢。现在我正在使用你的建议。我可能会考虑稍后切换安装模式…