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.

Jawaban:


163

Tujuan C

NSString* theFileName = [string lastPathComponent]

Cepat

let theFileName = (string as NSString).lastPathComponent

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

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

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!

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.


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

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.


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.


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

}


1

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

let urlWithoutFileExtension: URL =  originalFileUrl.deletingPathExtension()
let fileNameWithoutExtension: String = urlWithoutFileExtension.lastPathComponent
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.