2009-09-30 9 views
9

Je suis nouveau à la programmation iPhone. Je souhaite lire le contenu d'un fichier texte situé dans un sous-dossier du dossier Resource.iPhone: Obtenir le chemin du fichier qui est dans le sous-dossier du dossier de ressources

La structure de dossier de ressources est le suivant:

ressources

  1. Folder1 ----> Data.txt
  2. Dossier2 ----> Data.txt
  3. Folder3-- -> Folder1 ----> Data.txt

Il existe plusieurs fichiers nommés "Data.txt", alors comment puis-je accéder aux fichiers de chaque dossier? Je sais comment lire le fichier texte, mais si la structure Ressource est similaire à la structure ci-dessus, comment puis-je obtenir le chemin? Par exemple, si je veux accéder au fichier "Data.txt" à partir de Folder3, comment puis-je obtenir le chemin du fichier?

Veuillez nous suggérer.

Répondre

12

Pour continuer psychotiks répondre à un exemple complet ressemblerait à ceci:

NSBundle *thisBundle = [NSBundle bundleForClass:[self class]]; 
NSString *filePath = nil; 

if (filePath = [thisBundle pathForResource:@"Data" ofType:@"txt" inDirectory:@"Folder1"]) { 

    theContents = [[NSString alloc] initWithContentsOfFile:filePath]; 

    // when completed, it is the developer's responsibility to release theContents 

} 

Notez que vous pouvez utiliser -pathForResource: ofType: pour accéder à ressources Accès directs dans les sous-répertoires.

+0

Mais il existe plusieurs dossiers avec le même nom dans un dossier différent. dans ce cas, comment pouvez-vous atteindre le chemin – Rupesh

+4

@Rupesh: Pour le deuxième dossier, vous devez utiliser: '[thisBundle pathForResource: @" Données "deType: @" txt "inDirectory: @" Folder3/Folder1 "]'. Notez que l'argument 'inDirectory:' est relatif à la racine du bundle. – PeyloW

+1

Vous devriez vraiment utiliser '[NSString stringWithContentsOfFile: encodage filePath: erreur NSUTF8StringEncoding: NULL]', de cette façon la mémoire est _ "gérée" _, et plus important encore 'initWithContentsOfFile:' est obsolète depuis Mac OS X 10.4, et ** non disponible sur iPhone OS **. Donc, le code ne fonctionnera que dans le simulateur. – PeyloW

4
NSBundle* bundle = [NSBundle mainBundle]; 
    NSString* path = [bundle bundlePath]; 

Ceci vous donne le chemin vers votre bundle. À partir de là, vous pouvez naviguer dans la structure de votre dossier.

16

Votre "dossier de ressources" est en fait le contenu de votre bundle principal, également connu sous le nom d'ensemble d'applications. Vous utilisez pathForResource:ofType: ou pathForResource:ofType:inDirectory: pour obtenir le chemin d'accès complet d'une ressource.

Le chargement du contenu d'un fichier sous la forme d'une chaîne se fait avec la méthode stringWithContentsOfFile:encoding:error: pour une chaîne auto-libérée de initWithContentsOfFile:encoding:error: si vous souhaitez conserver une chaîne. Ceci est presque la même réponse que celle donnée par Shirkrin précédemment, mais à la légère différence que cela fonctionne sur la cible. C'est parce que initWithContentsOfFile: est obsolète sur Mac OS X, et non disponible sur tous les iPhone OS.

7

Shirkrin's answer et PeyloW's answer ci-dessus étaient utiles, et j'ai réussi à utiliser pathForResource:ofType:inDirectory: pour accéder à des fichiers portant le même nom dans différents dossiers de mon offre.

J'ai également trouvé une solution alternative here qui convenait un peu mieux à mes exigences, j'ai donc pensé à le partager. En particulier, voir this link.

Par exemple, dire que j'ai les références des dossiers suivants (icônes bleues, les groupes sont jaunes):

enter image description here

Ensuite, je peux accéder aux fichiers d'image comme ceci:

NSString * filePath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"pin_images/1/2.jpg"]; 
UIImage * image = [UIImage imageWithContentsOfFile:filePath]; 

Comme une note de côté, l'équivalent pathForResource:ofType:inDirectory: ressemble à ceci:

NSString * filePath = [[NSBundle mainBundle] pathForResource:@"2" ofType:@"jpg" inDirectory:@"pin_images/1/"]; 
+0

merci. fonctionne bien –

Questions connexes