Supposons que j'ai un ensemble arbitraire de fichiers inclus dans le bundle principal des applications. Je voudrais récupérer les URL des fichiers pour ceux au lancement et les stocker quelque part. Est-ce possible en utilisant NSFileManager
? La documentation n'est pas claire à cet égard.
Remarque: je n'ai besoin que des URL de fichier, je n'ai pas besoin d'accéder aux fichiers réels.
Vous pouvez obtenir l'URL d'un fichier dans le bundle principal en utilisant
NSString *path = [[NSBundle mainBundle] pathForResource:@"SomeFile" ofType:@"jpeg"];
NSURL *url = [NSURL fileURLWithPath:path];
Vous pouvez écrire cette URL dans, par exemple, un fichier de liste de propriétés dans le répertoire Documents:
NSString *docsDir = [NSSearchForDirectoriesInDomains(NSDocumentsDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *plistPath = [docsDir stringByAppendingPathComponent:@"Files.plist"];
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:[url absoluteString] forKey:@"SomeFile.jpeg"];
[dict writeToFile:plistPath atomically:YES];
Si vous ne connaissez pas les noms des fichiers et que vous souhaitez simplement répertorier tous les fichiers du bundle, utilisez
NSArray *files = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:[[NSBundle mainBundle] bundlePath] error:NULL];
for (NSString *fileName in files) {
NSString *path = [[NSBundle mainBundle] pathForResource:fileName ofType:nil];
NSURL *url = [NSURL fileURLWithPath:path];
// do something with `url`
}
Ou en Swift 4:
let url = Bundle.main.url(forResource: "FileName", withExtension: ".xyz")
Oui, vous obtiendriez leur chemin:
NSString *path = [NSBundle mainBundle] pathForResource:@"file1" ofType:@"png"];
NSURL *fileURL = [NSURL fileURLWithPath:path]
// save it as any other object or in a dictionary:
[myMutableDictionary setObject:fileURL forKey:@"file1.png"];
EDIT: pour obtenir la liste complète des fichiers, utilisez NSFileManager, obtenez le chemin d'accès au bundle lui-même, puis parcourez chaque répertoire en obtenant les fichiers, en créant des URL et en les enregistrant quelque part. Il y a des tonnes de code sur SO comment parcourir un répertoire pour ce faire. [Vous devriez mettre à jour votre question pour être plus précis sur ce que vous voulez, ce n'était pas clair du tout à l'origine])
Il existe une API sur NSBundle
( documentation ) disponible sur 10.6 ou iOS 4 pour obtenir directement un NSURL
, plutôt que de passer un chemin vers le NSURL
constructeur:
- (NSURL *)URLForResource:(NSString *)name withExtension:(NSString *)ext;
Il a également des variantes qui prennent un subdirectory
et localizationName
, le même que son -pathForResource:
équivalents.