Objective-C: Extrair nome do arquivo da cadeia de caminho


251

Quando eu tenho NSStringcom /Users/user/Projects/thefile.exteu quero extrair thefilecom métodos Objective-C.

Qual é a maneira mais fácil de fazer isso?


4
[path lastPathComponent] ou [[path pathComponents] lastObject]. Ambos fornece 'thefile.ext'. Existe o método [path pathExtension] para obter 'ext', mas não é o mesmo para o nome do arquivo.
Anton

Respostas:


598

Retirado da referência NSString , você pode usar:

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

A lastPathComponentchamada retornará thefile.exte stringByDeletingPathExtensionremoverá o sufixo do ramal do final.


9
Eu nunca ouvi falar lastPathComponent. Obrigado!
Dimitris

6
Outra solução seria uma combinação disso e das respostas de Marc: [[[NSFileManager defaultManager] displayNameAtPath:path] stringByDeletingPathExtension](use o gerenciador de arquivos que desejar). Isso garante que o nome do arquivo seja localizado corretamente e que a extensão foi removida.
willurd

1
Muito obrigado! Isso ajudou muito! Como você APENAS obteria a extensão?

20
@TwoDumplingNSString *myExtension = [myString pathExtension]
chown

Ei, isso é um pouco depois dessa discussão, mas estou apenas pensando em algo. Como eu reverteria essa ação? Acabarei adicionando algum código ao meu programa para onde posso arrastar e soltar um arquivo. Como obtenho o PATH PRÓPRIO, para que meu computador saiba qual arquivo acessar? Como pego o arquivo digitado e obtenho o caminho do arquivo?
Christian Kreiter

37

Se você estiver exibindo um nome de arquivo legível pelo usuário, não deseja usá-lo lastPathComponent. Em vez disso, passe o caminho completo para o displayNameAtPath:método do NSFileManager . Isso basicamente faz a mesma coisa, apenas localiza o nome do arquivo corretamente e remove a extensão com base nas preferências do usuário.


1
Para pacotes configuráveis, convém usar [[[NSBundle bundleWithPath: pref] localizedInfoDictionary] objectForKey: @ "CFBundleName"]. displayNameAtPath inclui a extensão em que esse código retorna o nome localizado.
9139 Peter N Lewis

1
Não se esqueça de verificar primeiro o CFBundleDisplayName.
9789 Peter Hosey

3

Correndo o risco de ficar anos atrasado e fora do tópico - e não obstante a excelente visão de @ Marc, em Swift, parece:

let basename = NSURL(string: "path/to/file.ext")?.URLByDeletingPathExtension?.lastPathComponent
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.