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.