Archivos en carpetas que no se encuentran en la aplicación iOS usando C ++

Estoy intentando leer files almacenados en la carpeta de resources y sus subcarpetas usando std :: ifstream en una aplicación de iOS escrita principalmente en C ++ (el mismo código también se usa en otros proyectos que no son de iOS), pero no se encuentran. Ejemplo: hay un file assets / shaders / ortho2d.vert y estoy intentando cargarlo así:

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

Agregué la carpeta de resources al proyecto XCode como una carpeta azul y aparece en Destinos-> Copiar packages de resources.

Prueba esto:

 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); 

Es posible que deba verificar la ruta relativa desde donde se ejecuta la aplicación y probablemente utilice una ruta completa para garantizar que se encuentre el file.

El hecho de que el abrir falló no significa necesariamente que no se encuentre el file, simplemente podría no ser legible en este momento. (Permisos incorrectos o file bloqueado).

La salida (1) es bastante drástica.

lo siento pero algunas puntuaciones:

  1. en iOS usando llamadas de sistema de files de C ++, se desaconseja mucho por problemas de security y soporte limitado desde el punto de vista de la security. Las llamadas al sistema de files deben realizarse una vez que conozca la aplicación iOS decentemente.
    layout de carpeta (packages, resources, carpeta de Documentos "y así sucesivamente …) de lo contrario fallará. c) puede mezclar c ++ y objC pero definitivamente no es un enfoque correcto.
  2. bajo iOS debes usar swift u objC (excect en casos muy limitados)
  3. use las API de iOS, exactamente como en Android usaría Java