我目前在xcode上遇到c ++问题。当我做fopen(" verShader.vsh"," r")时,它返回NULL指针。
如果我将verShader.vsh放到/ Users / apple / Library / Developer / Xcode / DerivedData / HollowWorld -hghymrkhtbuguoaiwgp tundpakuz / Build / Prod ucts / Debug,fopen()将起作用。但是在main.cpp的同一目录下的文件是/ Users / apple / Developer / C ++ / HelloWorld / HelloWorld。
答案 0 :(得分:1)
它返回NULL指针,因为工作空间是... / DerivedData / ...而" verShader.vsh"放在main.cpp的目录中
那是因为您正在使用文件名" verShader.vsh"没有提供文件的路径。 Mac(和iOS)应用程序包具有特定的结构,所有资源都存储在特定子目录中,而不是可执行文件或工作目录。
无论如何,当我构建项目时,它可以自动复制" verShader.vsh"执行文件的目录?
这是错误的方法 - 您仍然需要知道要复制的文件的路径,一旦您知道这一点,您可能只需将其读取到它所在的位置复制它。在Objective-C或Swift中,这很容易:
NSString * path = [[NSBundle mainBundle] pathForResource:@" verShader" ofType:@" VSH"];
在C ++中,您可以使用Core Foundation执行相同的操作:
CFBundleRef mainBundle = CFBundleGetMainBundle();
CFURLRef url = CFBundleCopyResourceURL(mainBundle, CFSTR("verShader"), CFSTR("vsh"), NULL);
char path[255]; // space for the path
Boolean success = CFURLGetFileSystemRepresentation(url, true, path, 255);
(警告:因为我需要使用Core Foundation,所以已经有一段时间了,所以请使用上面的代码作为起点,但不要害怕自己检查docs并制作任何必要的更正。)
获得路径后,可以将其与常用的C / C ++文件例程一起使用,例如fopen()
答案 1 :(得分:0)