2010-11-30 15 views
6

Estoy tratando de leer archivos almacenados en la carpeta de activos y sus subcarpetas usando std :: ifstream en una aplicación iOS escrita principalmente en C++ (el mismo código también se usa en otros, proyectos que no son iOS), pero no se encuentran. Ejemplo: hay un archivo activos/shaders/ortho2d.vert y yo estoy tratando de cargar así:Archivos en carpetas que no se encuentran en la aplicación iOS usando C++

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

He añadido la carpeta de activos al proyecto XCode como una carpeta azul y se aparece en Destinos-> Copiar recursos de paquete.

Respuesta

10

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

Qué idioma es ese? definitivamente no es C++. –

+1

El lenguaje es Objective-C++, lo que le permite mezclar libremente Objetivo -Código C++. Consulte Apple ["Uso de C++ con Objective-C"] (http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Articles/ocCPlusPlus.html) para obtener más información. información –

+0

Gracias! Funciona de maravilla. – SurvivalMachine

1

Puede que necesite comprobar la ruta relativa desde donde se ejecuta la aplicación y, probablemente, utilice una ruta completa para asegurarse de que se encuentra el archivo.

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

salida (1) es bastante drástico.

0

lo siento, pero algunos signos de puntuación:

  1. en iOS utilizando el sistema de archivos Las llamadas desde C++ es sumamente desalentador para los problemas de seguridad y un apoyo limitado desde el punto de vista de la seguridad. las llamadas al sistema de archivos deben realizarse una vez que conozca decentemente la aplicación iOS
    diseño de carpeta. (paquetes, recursos, carpeta Documentos "y así sucesivamente ...) de lo contrario fallará c) puede mezclar C++ y objC pero definitivamente no es un enfoque correcto.
  2. en iOS debe usar swift u objC (excect en casos muy limitados)
  3. uso de iOS API, exactamente como debajo de androide que usaría java
Cuestiones relacionadas