Objective-C: estrae il nome file dalla stringa del percorso


251

Quando ho NSStringcon /Users/user/Projects/thefile.extvoglio estrarre thefilecon i metodi Objective-C.

Qual è il modo più semplice per farlo?


4
[path lastPathComponent] o [[path pathComponents] lastObject]. Entrambi danno "thefile.ext". Esiste il metodo [path pathExtension] per ottenere 'ext' ma non è lo stesso per il nome file.
Anton,

Risposte:


598

Tratto dal riferimento NSString , puoi usare:

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

La lastPathComponentchiamata tornerà thefile.exte stringByDeletingPathExtensionrimuoverà il suffisso dell'interno dalla fine.


9
Non ne ho mai sentito parlare lastPathComponent. Grazie!
Dimitris,

6
Un'altra soluzione sarebbe una combinazione di questa e delle risposte di Marc: [[[NSFileManager defaultManager] displayNameAtPath:path] stringByDeletingPathExtension](usa qualunque file manager tu voglia). Ciò garantisce che il nome file sia localizzato correttamente e che l'estensione sia stata rimossa.
Willurd,

1
Grazie mille! Questo ha aiutato molto! Come vorresti solo ottenere l'estensione?

20
@TwoDumplingNSString *myExtension = [myString pathExtension]
chown

Ehi, questo è un po 'dopo questa discussione, ma mi sto solo chiedendo qualcosa. Come vorrei invertire questa azione? Alla fine aggiungerò un po 'di codice al mio programma in cui posso trascinare e rilasciare un file. Come posso ottenere il PERCORSO, così il mio computer può sapere a quale file accedere? Come posso prendere il file inserito e ottenere il percorso del file?
Christian Kreiter,

37

Se stai visualizzando un nome file leggibile dall'utente, non vuoi usarlo lastPathComponent. Passare invece il percorso completo al displayNameAtPath:metodo NSFileManager . Questo sostanzialmente fa la stessa cosa, solo localizza correttamente il nome del file e rimuove l'estensione in base alle preferenze dell'utente.


1
Per i bundle, potresti voler usare invece [[[[NSBundle bundleWithPath: pref] localizedInfoDictionary] objectForKey: @ "CFBundleName"]. displayNameAtPath include l'estensione in cui questo codice restituisce il nome localizzato.
Peter N Lewis,

1
Non dimenticare di controllare prima per CFBundleDisplayName.
Peter Hosey,

3

A rischio di essere in ritardo di anni e fuori tema - e nonostante le eccellenti intuizioni di @ Marc, in Swift sembra che:

let basename = NSURL(string: "path/to/file.ext")?.URLByDeletingPathExtension?.lastPathComponent
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.