9
votes

iPhone: Obtenez le chemin de fichier qui se trouve dans le sous-répertoire du dossier de ressources

Je suis nouveau dans la programmation iPhone. Je tiens à lire le contenu d'un fichier texte situé dans un sous-dossier du dossier de ressources.

La structure de dossiers de ressources est la suivante:

ressource

  1. Dossier1 ----> Data.txt
  2. Dossier2 ----> Data.txt
  3. Dossier3 ----> Dossier1 ----> 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 de ressources est similaire à la structure ci-dessus, comment puis-je obtenir le chemin?

    Par exemple, si je veux accéder au fichier "data.txt" de dossier3, comment puis-je obtenir le chemin de fichier?

    S'il vous plaît suggérer.


0 commentaires

4 Réponses :


4
votes
    NSBundle* bundle = [NSBundle mainBundle];
    NSString* path = [bundle bundlePath];
This gives you the path to your bundle. From there on, you can navigate your folder structure.

0 commentaires

12
votes

Pour poursuivre les psychotiks Répondez à un exemple complet ressemblerait à ceci: XXX

Notez que vous pouvez utiliser -Pathforresource: ofType: indirectory pour accéder à des ressources dans des sous-répertoires.


6 commentaires

Mais il y a plusieurs dossiers avec le même nom dans différents dossiers. donc dans ce cas, comment peut atteindre le chemin


@Rupesh: Pour le deuxième dossier, vous devez utiliser: [THEBUNDLE PATHFORRESOURCE: @ "DATA" OFTYPE: @ "TXT" Indirectory: @ "Folder3 / Dossier1"] . Notez que indirectory: argument est relatif à la racine du paquet.


VOUS DEVEZ VRAIMENT UTILISER [NSSTRING STRINGWIHCONTENTSOFFILE: NSUPATF8StringCoding Erreur: 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 - Je suis d'accord avec toi. L'exemple est une version modifiée de la documentation NSBundle qui n'utilise pas de pools de l'autoraélase.


@PEYLOW - tandis qu'IitwithContentsofurl est effectivement obsolète, Apple n'a donc pas besoin de vous demander de spécifier un codage (mouvement sage de leur part). Donc, la méthode initwithcontentsofurl: codage: Erreur: est disponible dans iOS 2.0 et ultérieure (au moins via iOS 5.1).


Et si je veux récupérer tous les fichiers du dossier, cela ne semble pas fonctionner .... Nstring * inworkPath = [[[[[[[NSBundle MainBundune] ResourcePath] StringByAppendingPathcomponent: @ "En-travail"]; NSARRAY * NOMDONTENTS = [[NSFILEMANOGER BLABLEMANGER] CONTENU DEFDIRACTORYATPATH: ERREUR INTERWWORKPATH: & Erreur];



16
votes

Votre "Dossier de ressources" em> est en réalité le contenu de votre paquet principal, connais également en tant que faisceau d'applications. Vous utilisez pathforresource: detype: code> ou pathforresource: detype: indirectoire: code> pour obtenir le chemin complet d'une ressource.

Chargement du contenu d'un fichier en tant que chaîne est effectuée. Avec le StringwithContentsOffile: codage: ERREUR: ERREUR: ERREUR: ERREUR: CODE> Méthode pour une chaîne d'autorélisation avec initwithContentsOffile: codage: Erreur: code> Si vous voulez une chaîne conservée. P>

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"Data" 
                                                     ofType:@"txt"
                                                inDirectory:@"Folder1"];
if (filePath != nil) {
  theContents = [NSString stringWithContentsOfFile:filePath
                                          encoding:NSUTF8StringEncoding
                                             error:NULL];
  // Do stuff to theContents
}


0 commentaires

8
votes

Réponse de Shirkrin et La réponse de Peylow ci-dessus était à la fois utile, et j'ai réussi à utiliser Pathforresource: ofType: indirectoire: Pour accéder aux fichiers avec le même nom dans différents dossiers de mon ensemble d'applications.

J'ai aussi trouvé Une solution alternative ici qui convient à mes besoins légèrement mieux, alors j'ai pensé que je le partageais. En particulier, voir Ce lien .

Par exemple, disons que j'ai les références de dossiers suivantes (icônes bleues, groupes sont jaunes):

 Entrez la description de l'image ici

alors je peux accéder à des fichiers image tels que ceci: xxx

comme une note latérale, Le Pathforresource: ofType: indirectory: équivalent ressemble à ceci: xxx


0 commentaires