Come ottenere il nome del file dal percorso file in swift


98

Come ottenere il nome del file dalla stringa del percorso del file specificato?

Ad esempio, se ho una stringa del percorso file come

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 vorrei ottenere il risultato di ritorno come

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

Grazie per l'aiuto.

Risposte:


163

Obiettivo C

NSString* theFileName = [string lastPathComponent]

Swift

let theFileName = (string as NSString).lastPathComponent

1
forse dovresti evidenziare in Swift che funziona solo per NSString, come: var theFileName: NSString = string.lastPathComponent // o var theFileName: String = (string as NSString) .lastPathComponent
Babac

3
a Swift, i nomi dei file locali sono altamente è suggerito per essere gestito come URLs, non come Strings o NSStrings
bshirley

32

SWIFT 3.xo SWIFT 4: il modo più breve e più pulito per farlo è di seguito. In questo esempio la urlvariabileèdi tipo URLin questo modo possiamo avere un Stringrisultato leggibile dall'uomo del nome completo del file con estensione simile My file name.txte Non simileMy%20file%20name.txt

// Result like: My file name.txt
let fileName = url.lastPathComponent

2
questo restituisce sempre asset.JPG per le immagini.
Harsh Nigam

Guarda la risposta di Swift 2 che include Swift 3 ed è più coerente.
Tyler A.

anche il mio - @HarshNigam
Daniel Pereira

29

Se vuoi ottenere il nome del file corrente, ad esempio per scopi di registrazione, lo uso.

Swift 4

URL(fileURLWithPath: #file).lastPathComponent

1
Buono a sapersi: utilizzare init(fileURLWithPath path: __shared String, isDirectory: Bool)per evitare un accesso aggiuntivo al file system. Dalla documentazione: questa funzione evita un accesso aggiuntivo al file system per verificare se l'URL del file è una directory. Dovresti usarlo se conosci già la risposta.
Marco

24

Swift 2:

var file_name = NSURL(fileURLWithPath: path_to_file).lastPathComponent!

Questo è il metodo che il compilatore dice di usare se si chiama lastPathComponentuno swift String(al contrario del casting NSString).
i_am_jorf

Buono a sapersi: utilizzare init(fileURLWithPath path: __shared String, isDirectory: Bool)per evitare un accesso aggiuntivo al file system. Dalla documentazione: questa funzione evita un accesso aggiuntivo al file system per verificare se l'URL del file è una directory. Dovresti usarlo se conosci già la risposta.
Marco

14

Prova questo

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

Aggiornato:

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

Spero che sia d'aiuto.


11

Il codice seguente funziona per me in 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

5
let theURL = URL(string: "yourURL/somePDF.pdf")  //use your URL
let fileNameWithExt = theURL?.lastPathComponent //somePDF.pdf
let fileNameLessExt = theURL?.deletingPathExtension().lastPathComponent //somePDF

Affinché funzioni, il tuo URL deve essere di tipo URL e non una stringa, quindi non convertirlo prima in una stringa.

Puoi copiare e incollare questo codice direttamente in playground per vedere come funziona.


4

Puoi passare l'URL in fileUrl, come ho fatto di seguito: -

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

// Quest'ultimo componente del percorso fornirà il nome del file con estensione.


1
Questa è una risposta solo in codice poco apprezzata. Per favore aggiungi qualche spiegazione. Ciò migliorerà le tue possibilità di ottenere voti positivi e aiuterà anche a combattere il malinteso secondo cui puoi svolgere il lavoro di programmazione qui gratuitamente.
Yunnosch

1

Crea un URL del modulo "nome file" univoco che include due cartelle precedenti

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

}


1

Per recuperare il nome del file senza la sua estensione da un URL in Swift> = 4.2:

let urlWithoutFileExtension: URL =  originalFileUrl.deletingPathExtension()
let fileNameWithoutExtension: String = urlWithoutFileExtension.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.