2010-11-30 3 views
6

J'essaie de lire les fichiers stockés dans le dossier assets et ses sous-dossiers en utilisant std :: ifstream dans une application iOS écrite principalement en C++ (Le même code est également utilisé dans d'autres, projets non-iOS), mais ils ne sont pas trouvés. Exemple: il y a un fichier actifs/Shaders/ortho2d.vert et je suis en train de le charger comme ceci:Fichiers dans des dossiers introuvables dans l'application iOS en C++

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

J'ai ajouté le dossier actif au projet XCode comme un dossier bleu et apparaît dans Cibles-> Copier les ressources de l'ensemble.

Répondre

10

Essayez ceci:

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

Quelle langue est-ce? Il est certainement pas C++. –

+1

La langue est Objective-C++, ce qui vous permet de mélanger librement Objectif -C & C++ code.Voir Apple ["Utiliser C++ avec Objective-C"] (http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Articles/ocCPlusPlus.html) pour plus informations –

+0

Merci! Fonctionne comme un charme. – SurvivalMachine

1

Vous devrez peut-être vérifier le chemin relatif à partir duquel l'application s'exécute et utiliser probablement un chemin d'accès complet pour vous assurer que le fichier est trouvé.

Le fait que l'ouverture échoue ne signifie pas nécessairement que le fichier n'est pas trouvé, il pourrait ne pas être lisible pour le moment. (Autorisations incorrectes ou fichier verrouillé).

sortie (1) est plutôt drastique.

0

désolé mais quelques ponctuations:

  1. sur iOS en utilisant le système de fichiers appelle de C++ est fortement déconseillée pour les questions de sécurité et un soutien limité d'un point de sécurité de vue. appels au système de fichiers devrait être fait après que vous connaissez décemment iOS app
    mise en page du dossier. (bundles, resources, dossier Documents "et ainsi de suite ..) c) vous pouvez mélanger C++ et objC mais définitivement est pas une approche correcte
  2. sous iOS, vous devez utiliser swift ou objC (excect dans des cas très limités)
  3. utilisation des API iOS, exactement comme sous Android que vous utilisez java
Questions connexes