So erhalten Sie den Dateinamen schnell aus dem Dateipfad

98

Wie erhalte ich den Dateinamen aus der angegebenen Dateipfadzeichenfolge?

Zum Beispiel, wenn ich eine Dateipfadzeichenfolge als habe

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

und ich möchte das Rückgabeergebnis als erhalten

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

Danke für Ihre Hilfe.

Ralph
quelle

Antworten:

163

Ziel c

NSString* theFileName = [string lastPathComponent]

Schnell

let theFileName = (string as NSString).lastPathComponent
Sujith Chandran
quelle
1
Vielleicht sollten Sie in Swift hervorheben, dass dies nur für NSString funktioniert, wie: var theFileName: NSString = string.lastPathComponent // oder var theFileName: String = (Zeichenfolge als NSString) .lastPathComponent
Babac
3
In Swift wird dringend empfohlen , lokale Dateinamen als URLs zu verwalten , nicht als Strings oder NSStrings
bshirley
32

SWIFT 3.x oder SWIFT 4: Der kürzeste und sauberste Weg, dies zu tun, ist unten. In diesem Beispiel ist eine urlVariable vom Typ. Auf URLdiese Weise können wir ein lesbares StringErgebnis des vollständigen Dateinamens mit der Erweiterung like My file name.txtund Not like erhaltenMy%20file%20name.txt

// Result like: My file name.txt
let fileName = url.lastPathComponent
Trevor
quelle
2
Dies gibt immer Asset.JPG für Bilder zurück.
Harte Nigam
Siehe die Swift 2-Antwort, die Swift 3 enthält und kohärenter ist.
Tyler A.
meins auch - @HarshNigam
Daniel Pereira
28

Wenn Sie den aktuellen Dateinamen abrufen möchten, z. B. zu Protokollierungszwecken, verwende ich diesen.

Swift 4

URL(fileURLWithPath: #file).lastPathComponent
Jose Ramirez
quelle
1
Gut zu wissen: Verwenden Sie init(fileURLWithPath path: __shared String, isDirectory: Bool)diese Option, um einen zusätzlichen Zugriff auf das Dateisystem zu vermeiden. Aus den Dokumenten: Diese Funktion vermeidet einen zusätzlichen Dateisystemzugriff, um zu überprüfen, ob die Datei-URL ein Verzeichnis ist. Sie sollten es verwenden, wenn Sie die Antwort bereits kennen.
Mark
24

Swift 2:

var file_name = NSURL(fileURLWithPath: path_to_file).lastPathComponent!
Vingtoft
quelle
Dies ist die Methode, die der Compiler verwenden soll, wenn Sie lastPathComponenteinen Swift aufrufen String(im Gegensatz zum Casting auf NSString).
i_am_jorf
Gut zu wissen: Verwenden Sie init(fileURLWithPath path: __shared String, isDirectory: Bool)diese Option, um einen zusätzlichen Zugriff auf das Dateisystem zu vermeiden. Aus den Dokumenten: Diese Funktion vermeidet einen zusätzlichen Dateisystemzugriff, um zu überprüfen, ob die Datei-URL ein Verzeichnis ist. Sie sollten es verwenden, wenn Sie die Antwort bereits kennen.
Mark
14

Versuche dies

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

Aktualisiert :

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

Ich hoffe es hilft.

Pradumna Patil
quelle
11

Der folgende Code funktioniert für mich 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
Ashu
quelle
5
let theURL = URL(string: "yourURL/somePDF.pdf")  //use your URL
let fileNameWithExt = theURL?.lastPathComponent //somePDF.pdf
let fileNameLessExt = theURL?.deletingPathExtension().lastPathComponent //somePDF

Damit dies funktioniert, muss Ihre URL vom Typ URL und keine Zeichenfolge sein. Konvertieren Sie sie daher nicht vorher in eine Zeichenfolge.

Sie können diesen Code kopieren und direkt in den Spielplatz einfügen, um zu sehen, wie er funktioniert.

Robac
quelle
4

Sie können die URL in fileUrl übergeben, wie ich es unten getan habe: -

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

// Diese letzte Pfadkomponente gibt Ihnen den Dateinamen mit der Erweiterung.

Nishant Sharma
quelle
1
Dies ist eine wenig geschätzte Nur-Code-Antwort. Bitte fügen Sie eine Erklärung hinzu. Dies verbessert Ihre Chancen auf Upvotes und hilft auch dabei, das Missverständnis zu bekämpfen, dass Sie hier kostenlos Programmierarbeiten erledigen können.
Yunnosch
1

Erstellt eine eindeutige "Dateiname" -Formular-URL mit zwei vorherigen Ordnern

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
quelle
1

So rufen Sie Dateinamen ohne Erweiterung von einer URL in Swift ab> = 4.2:

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