Cara mendapatkan nama file dari jalur file dengan cepat

98

Bagaimana cara mendapatkan nama file dari string jalur file yang diberikan?

Misalnya jika saya memiliki string jalur file sebagai

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

dan saya ingin mendapatkan hasil pengembalian sebagai

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

Terima kasih untuk bantuannya.

Muntah
sumber

Jawaban:

163

Tujuan C

NSString* theFileName = [string lastPathComponent]

Cepat

let theFileName = (string as NSString).lastPathComponent
Sujith Chandran
sumber
1
mungkin Anda harus menyoroti di Swift bahwa ini hanya berfungsi untuk NSString, seperti: var theFileName: NSString = string.lastPathComponent // atau var theFileName: String = (string as NSString) .lastPathComponent
Babac
3
di Swift, nama file lokal sangat disarankan untuk dikelola sebagai URLs, bukan sebagai Strings atau NSStrings
bshirley
32

SWIFT 3.x atau SWIFT 4: Cara terpendek dan terbersih untuk melakukannya ada di bawah ini. Dalam contoh urlvariabel ini berjenis URLdengan cara ini kita dapat memiliki Stringhasil yang dapat dibaca manusia dari nama file lengkap dengan ekstensi like My file name.txtdan Not like.My%20file%20name.txt

// Result like: My file name.txt
let fileName = url.lastPathComponent
Trevor
sumber
2
ini selalu mengembalikan asset.JPG untuk gambar.
Harsh Nigam
Lihat jawaban Swift 2 yang menyertakan Swift 3 dan lebih koheren.
Tyler A.
milikku juga - @HarshNigam
Daniel Pereira
29

Jika Anda ingin mendapatkan nama file saat ini seperti untuk tujuan logging, saya menggunakan ini.

Cepat 4

URL(fileURLWithPath: #file).lastPathComponent
Jose Ramirez
sumber
1
Sebaiknya Anda tahu: gunakan init(fileURLWithPath path: __shared String, isDirectory: Bool)untuk menghindari akses sistem file tambahan. Dari dokumen: Fungsi ini menghindari akses sistem file tambahan untuk memeriksa apakah URL file adalah direktori. Anda harus menggunakannya jika Anda sudah tahu jawabannya.
Tandai
24

Cepat 2:

var file_name = NSURL(fileURLWithPath: path_to_file).lastPathComponent!
Vingtoft
sumber
Ini adalah metode yang dikatakan compiler untuk digunakan jika Anda memanggil lastPathComponentswift String(sebagai kebalikan dari casting NSString).
i_am_jorf
Sebaiknya Anda tahu: gunakan init(fileURLWithPath path: __shared String, isDirectory: Bool)untuk menghindari akses sistem file tambahan. Dari dokumen: Fungsi ini menghindari akses sistem file tambahan untuk memeriksa apakah URL file adalah direktori. Anda harus menggunakannya jika Anda sudah tahu jawabannya.
Tandai
14

Coba ini

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

Diperbarui:

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

Semoga membantu.

Pradumna Patil
sumber
11

Kode di bawah ini berfungsi untuk saya di 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
sumber
5
let theURL = URL(string: "yourURL/somePDF.pdf")  //use your URL
let fileNameWithExt = theURL?.lastPathComponent //somePDF.pdf
let fileNameLessExt = theURL?.deletingPathExtension().lastPathComponent //somePDF

Agar ini berfungsi, url Anda harus berupa URL jenis bukan string jadi jangan mengubahnya menjadi string sebelumnya.

Anda dapat menyalin dan menempelkan kode ini langsung ke taman bermain untuk melihat cara kerjanya.

Robac
sumber
4

Anda dapat mengirimkan url di fileUrl, seperti yang saya lakukan di bawah ini: -

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

// Komponen jalur terakhir ini akan memberi Anda Nama file dengan ekstensi.

Nishant Sharma
sumber
1
Ini adalah jawaban kode-saja yang sedikit dihargai. Mohon tambahkan penjelasan. Itu akan meningkatkan peluang Anda untuk mendapatkan suara positif dan juga membantu melawan kesalahpahaman bahwa Anda dapat menyelesaikan pekerjaan pemrograman di sini secara gratis.
Yunnosch
1

Membuat url bentuk "nama file" yang unik termasuk dua folder sebelumnya

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

Untuk mengambil nama file tanpa ekstensinya dari URL di Swift> = 4.2:

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