Pour une raison folle, je ne trouve pas de moyen d'obtenir une liste de fichiers avec un glob pour un répertoire donné.
Je suis actuellement coincé avec quelque chose du genre:
NSString *bundleRoot = [[NSBundle mainBundle] bundlePath];
NSArray *dirContents = [[NSFileManager defaultManager]
directoryContentsAtPath:bundleRoot];
..et puis dépouiller les trucs que je ne veux pas, ce qui est nul. Mais ce que j'aimerais vraiment, c'est pouvoir rechercher quelque chose comme "foo * .jpg" au lieu de demander le répertoire entier, mais je n'ai rien trouvé de tel.
Alors comment diable faites-vous cela?
ios
objective-c
iphone
cocoa
cocoa-touch
sammich
la source
la source
Réponses:
Vous pouvez y parvenir assez facilement avec l'aide de NSPredicate, comme ceci:
Si vous devez le faire avec NSURL à la place, cela ressemble à ceci:
la source
Cela fonctionne très bien pour
IOS
, mais devrait également fonctionner pourcocoa
.la source
Qu'en est-il des méthodes hasSuffix et hasPrefix de NSString? Quelque chose comme (si vous recherchez "foo * .jpg"):
Pour des correspondances simples et directes comme celle-ci, ce serait plus simple que d'utiliser une bibliothèque de regex.
la source
contentsOfDirectoryAtPath:error:
au lieu dedirectoryContentsAtPath
parce que c'estdeprecated
depuisiOS
2.0Méthode la plus simple:
la source
Unix a une bibliothèque qui peut effectuer des opérations de globalisation de fichiers pour vous. Les fonctions et les types sont déclarés dans un en-tête appelé
glob.h
, vous en aurez donc besoin#include
. Si vous ouvrez un terminal et ouvrez la page de manuel de glob en tapant,man 3 glob
vous obtiendrez toutes les informations dont vous avez besoin pour utiliser les fonctions.Vous trouverez ci-dessous un exemple de la façon dont vous pouvez remplir un tableau des fichiers qui correspondent à un modèle de globbing. Lorsque vous utilisez la
glob
fonction, vous devez garder à l'esprit certaines choses.glob
fonction recherche les fichiers dans le répertoire de travail actuel. Pour rechercher un autre répertoire, vous devrez ajouter le nom du répertoire au modèle de globbing comme je l'ai fait dans mon exemple pour obtenir tous les fichiers/bin
.glob
en appelantglobfree
lorsque vous avez terminé avec la structure.Dans mon exemple, j'utilise les options par défaut et aucun rappel d'erreur. La page de manuel couvre toutes les options au cas où vous souhaiteriez utiliser quelque chose. Si vous allez utiliser le code ci-dessus, je vous suggère de l'ajouter en tant que catégorie à
NSArray
ou quelque chose du genre.Edit: J'ai créé un résumé sur github qui contient le code ci-dessus dans une catégorie appelée NSArray + Globbing .
la source
stringWithCString:
est obsolète. Le remplacement correct est-[NSFileManager stringWithFileSystemRepresentation:length:]
, bien que je pense que la plupart des gens utilisentstringWithUTF8String:
(ce qui est plus facile mais pas garanti d'être le bon encodage).Vous devez utiliser votre propre méthode pour éliminer les fichiers dont vous ne voulez pas.
Ce n'est pas facile avec les outils intégrés, mais vous pouvez utiliser RegExKit Lite pour vous aider à trouver les éléments du tableau renvoyé qui vous intéressent. Selon les notes de publication, cela devrait fonctionner dans les applications Cocoa et Cocoa-Touch.
Voici le code de démonstration que j'ai rédigé en 10 minutes environ. J'ai changé les <et> en "parce qu'ils n'apparaissaient pas dans le bloc pré, mais cela fonctionne toujours avec les guillemets. Peut-être que quelqu'un qui en sait plus sur le formatage du code ici sur StackOverflow corrigera cela (Chris?).
Il s'agit d'un projet de modèle d'utilitaire de ligne de commande «Foundation Tool». Si mon démon git est opérationnel sur mon serveur domestique, je modifierai ce message pour ajouter l'URL du projet.
la source
Je ne prétendrai pas être un expert sur le sujet, mais vous devriez avoir accès à la fois à la fonction
glob
et àwordexp
partir d'objectif-c, non?la source
stringWithFileSystemRepresentation ne semble pas être disponible dans iOS.
la source
Swift 5
Cela fonctionne pour le cacao
la source
Swift 5 pour le cacao
la source