2009-07-08 6 views
241

Lorsque j'ai NSString avec /Users/user/Projects/thefile.ext Je veux extraire thefile avec les méthodes Objective-C.Objective-C: Extraire le nom de fichier de la chaîne de chemin

Quelle est la manière la plus facile de faire cela?

+4

[chemin lastPathComponent] ou [path [pathComponents] LastObject]. Les deux donnent 'thefile.ext'. Il existe une méthode [path pathExtension] pour obtenir 'ext' mais pas la même chose pour le nom de fichier. – Anton

Répondre

581

Tiré de the NSString reference, vous pouvez utiliser:

NSString *theFileName = [[string lastPathComponent] stringByDeletingPathExtension]; 

L'appel lastPathComponent retournera thefile.ext et le stringByDeletingPathExtension va supprimer l'extension suffic de la fin.

+3

OMG! Merci merci merci! – Anton

+9

Je n'ai jamais entendu parler de 'lastPathComponent'. Je vous remercie! – Dimitris

+5

Une autre solution serait une combinaison de ceci et des réponses de Marc: '[[[NSFileManager defaultManager] displayNameAtPath: chemin] stringByDeletingPathExtension]' (utilisez le gestionnaire de fichiers que vous voulez). Cela garantit que le nom de fichier est correctement localisé et que l'extension a été supprimée. – willurd

37

Si vous affichez un nom de fichier lisible par l'utilisateur, faites et non pour utiliser lastPathComponent. Au lieu de cela, passez le chemin d'accès complet à la méthode displayNameAtPath: de NSFileManager. Cela fait essentiellement la même chose, seulement il localise correctement le nom du fichier et supprime l'extension en fonction des préférences de l'utilisateur.

+1

Pour les bundles, vous pouvez utiliser [[NSBundle bundleWithPath: pref] localizedInfoDictionary] objectForKey: @ "CFBundleName"] à la place. displayNameAtPath inclut l'extension où ce code renvoie le nom localisé. –

+1

N'oubliez pas d'abord de rechercher CFBundleDisplayName. –

3

Au risque d'être en retard et années hors sujet - et malgré @ excellent aperçu de Marc, à Swift il ressemble:

let basename = NSURL(string: "path/to/file.ext")?.URLByDeletingPathExtension?.lastPathComponent 
Questions connexes