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.

Antworten:


163

Ziel c

NSString* theFileName = [string lastPathComponent]

Schnell

let theFileName = (string as NSString).lastPathComponent

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

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

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!

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.


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

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.


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.


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

}}


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.