8

我正在尝试在主要用 C++ 编写的 iOS 应用程序中使用 std::ifstream 读取存储在 assets 文件夹及其子文件夹中的文件(相同的代码也用于其他非 iOS 项目),但找不到它们。示例:有一个文件assets/shaders/ortho2d.vert我正在尝试像这样加载它:

std::ifstream vertFStream( vertFile ); // vertFile's contents is "assets/shaders/ortho2d.vert"
if (!vertFStream) {
    std::cerr << vertFile << " missing!" << std::endl;
    exit( 1 );
}

我已将 assets 文件夹作为蓝色文件夹添加到 XCode 项目中,它显示在 Targets->Copy Bundle Resources 中。

4

3 回答 3

12

尝试这个:

NSBundle *b = [NSBundle mainBundle];
NSString *dir = [b resourcePath];
NSArray *parts = [NSArray arrayWithObjects:
                  dir, @"assets", @"shaders", @"ortho2d.vert", (void *)nil];
NSString *path = [NSString pathWithComponents:parts];
const char *cpath = [path fileSystemRepresentation];
std::string vertFile(cpath);
std::ifstream vertFStream(vertFile);
于 2010-11-30T18:40:41.693 回答
1

您可能需要检查应用程序运行的相对路径,并可能使用完整路径来确保找到文件。

打开失败的事实并不一定意味着找不到文件,只是此时可能无法读取。(权限不正确或文件被锁定)。

exit(1) 相当激烈。

于 2010-11-30T12:44:28.170 回答
-1

抱歉,有一些标点符号:

  1. 在 iOS 上使用来自 C++ 的文件系统调用是非常不鼓励的,因为安全问题和从安全角度来看有限的支持。对文件系统的调用应该在您熟悉 iOS 应用程序
    文件夹布局之后进行。(捆绑,资源,文档文件夹”等等..)否则它将失败。c)您可以混合使用 c++ 和 objC,但绝对不是正确的方法。
  2. 在 iOS 下你必须使用 swift 或 objC(在非常有限的情况下除外)
  3. 使用 iOS API,就像在 android 下你会使用 java
于 2017-07-27T10:59:13.980 回答