Objective-C: extraire le nom de fichier de la chaîne de chemin


251

Quand j'ai NSStringavec /Users/user/Projects/thefile.extje veux extraire thefileavec des méthodes Objective-C.

Quelle est la façon la plus simple de procéder?


4
[path 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éponses:


598

Tiré de la référence NSString , vous pouvez utiliser:

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

L' lastPathComponentappel reviendra thefile.extet stringByDeletingPathExtensionsupprimera le suffixe d'extension de la fin.


9
Je n'en ai jamais entendu parler lastPathComponent. Je vous remercie!
— Dimitris

6
Une autre solution serait une combinaison de cela et des réponses de Marc: [[[NSFileManager defaultManager] displayNameAtPath:path] 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

1
Merci beaucoup! Cela a beaucoup aidé! Comment obtiendriez-vous JUSTEMENT l'extension?

20
@TwoDumplingNSString *myExtension = [myString pathExtension]
— chown

Hé, c'est un peu après cette discussion, mais je me demande juste quelque chose. Comment pourrais-je inverser cette action? J'ajouterai éventuellement du code à mon programme à l'endroit où je pourrai glisser-déposer un fichier. Comment puis-je obtenir le CHEMIN D'ACCÈS, afin que mon ordinateur sache à quel fichier accéder? Comment prendre le fichier entré et obtenir le chemin du fichier?
— Christian Kreiter

37

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


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

1
N'oubliez pas de vérifier d'abord CFBundleDisplayName.
— Peter Hosey

3

Au risque d'être des années en retard et hors sujet - et malgré l'excellente perspicacité de @ Marc, dans Swift, cela ressemble à:

let basename = NSURL(string: "path/to/file.ext")?.URLByDeletingPathExtension?.lastPathComponent
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.