Como obter o nome do arquivo a partir do caminho do arquivo em swift

98

Como obter o nome do arquivo da string de caminho de arquivo fornecida?

Por exemplo, se eu tiver uma string de caminho de arquivo como

file:///Users/DeveloperTeam/Library/Developer/CoreSimulator/Devices/F33222DF-D8F0-448B-A127-C5B03C64D0DC/data/Containers/Data/Application/5D0A6264-6007-4E69-A63B-D77868EA1807/tmp/trim.D152E6EA-D19D-4E3F-8110-6EACB2833CE3.MOV

e eu gostaria de obter o resultado de retorno como

trim.D152E6EA-D19D-4E3F-8110-6EACB2833CE3.MOV 

Obrigado pela ajuda.

Ralph
fonte

Respostas:

163

Objetivo C

NSString* theFileName = [string lastPathComponent]

Rápido

let theFileName = (string as NSString).lastPathComponent
Sujith Chandran
fonte
1
talvez você deva destacar em Swift que isso funciona apenas para NSString, como: var theFileName: NSString = string.lastPathComponent // ou var theFileName: String = (string como NSString) .lastPathComponent
Babac
3
em Swift, é altamente recomendável que os nomes de arquivos locais sejam gerenciados como URLs, não como Strings ou NSStrings
bshirley
32

SWIFT 3.x ou SWIFT 4: A maneira mais curta e limpa de fazer isso está abaixo. Neste exemplo, a urlvariável é do tipo URL, desta forma podemos ter um Stringresultado legível por humanos do nome completo do arquivo com extensão like My file name.txte Not likeMy%20file%20name.txt

// Result like: My file name.txt
let fileName = url.lastPathComponent
Trevor
fonte
2
isso sempre retorna asset.JPG para imagens.
Harsh Nigam
Veja a resposta do Swift 2 que inclui o Swift 3 e é mais coerente.
Tyler A.
o meu também - @HarshNigam
Daniel Pereira
29

Se você quiser obter o nome do arquivo atual, como para fins de registro, eu uso isso.

Swift 4

URL(fileURLWithPath: #file).lastPathComponent
Jose Ramirez
fonte
1
É bom saber: use init(fileURLWithPath path: __shared String, isDirectory: Bool)para evitar um acesso extra ao sistema de arquivos. Dos documentos: Esta função evita um acesso extra ao sistema de arquivos para verificar se o URL do arquivo é um diretório. Você deve usá-lo se já souber a resposta.
Marcos
24

Swift 2:

var file_name = NSURL(fileURLWithPath: path_to_file).lastPathComponent!
Vingtoft
fonte
Este é o método que o compilador diz para usar se você chamar lastPathComponentum swift String(ao invés de lançar NSString).
i_am_jorf
É bom saber: use init(fileURLWithPath path: __shared String, isDirectory: Bool)para evitar um acesso extra ao sistema de arquivos. Dos documentos: Esta função evita um acesso extra ao sistema de arquivos para verificar se o URL do arquivo é um diretório. Você deve usá-lo se já souber a resposta.
Marcos
14

Tente isto

let filename: String = "your file name"
let pathExtention = filename.pathExtension
let pathPrefix = filename.stringByDeletingPathExtension

Atualizada :

extension String {
    var fileURL: URL {
        return URL(fileURLWithPath: self)
    }
    var pathExtension: String {
        return fileURL.pathExtension
    }
    var lastPathComponent: String {
        return fileURL.lastPathComponent
    }
}

Espero que ajude.

Pradumna Patil
fonte
11

O código abaixo está funcionando para mim no Swift 4.X

 let filename = (self.pdfURL as NSString).lastPathComponent  // pdfURL is your file url
 let fileExtention = (filename as NSString).pathExtension  // get your file extension
 let pathPrefix = (filename as NSString).deletingPathExtension   // File name without extension
 self.lblFileName.text = pathPrefix  // Print name on Label
Ashu
fonte
5
let theURL = URL(string: "yourURL/somePDF.pdf")  //use your URL
let fileNameWithExt = theURL?.lastPathComponent //somePDF.pdf
let fileNameLessExt = theURL?.deletingPathExtension().lastPathComponent //somePDF

Para que isso funcione, sua url deve ser do tipo URL, não uma string, portanto, não a converta em uma string antes.

Você pode copiar e colar este código diretamente no playground para ver como funciona.

Robac
fonte
4

Você pode passar o url em fileUrl, como eu fiz abaixo: -

let fileUrl: String = "https://www.himgs.com/imagenes/hello/social/hello-fb-logo.png" // Pass the URL 

let lastPathComponent = URL.init(string: fileUrl)?.lastPathComponent ?? "" // With this you will get last path component

let fileNameWithExtension = lastPathComponent

// Este último componente de caminho fornecerá o nome do arquivo com extensão.

Nishant Sharma
fonte
1
Esta é uma resposta apenas de código pouco apreciada. Adicione alguma explicação. Isso aumentará suas chances de votos positivos e também ajudará a combater o equívoco de que você pode fazer o trabalho de programação aqui gratuitamente.
Yunnosch
1

Cria um URL de formulário de "nome de arquivo" exclusivo, incluindo duas pastas anteriores

func createFileNameFromURL (colorUrl: URL) -> String {

var arrayFolders = colorUrl.pathComponents

// -3 because last element from url is "file name" and 2 previous are folders on server
let indx = arrayFolders.count - 3
var fileName = ""

switch indx{
case 0...:
    fileName = arrayFolders[indx] + arrayFolders[indx+1] + arrayFolders[indx+2]
case -1:
    fileName = arrayFolders[indx+1] + arrayFolders[indx+2]
case -2:
    fileName = arrayFolders[indx+2]
default:
    break
}


return fileName

}

Pvlub
fonte
1

Para recuperar o nome do arquivo sem sua extensão de um URL em Swift> = 4.2:

let urlWithoutFileExtension: URL =  originalFileUrl.deletingPathExtension()
let fileNameWithoutExtension: String = urlWithoutFileExtension.lastPathComponent
Taiwosam
fonte