Dosya adını hızlı bir şekilde dosya yolundan alma


98

Verilen dosya yolu dizesinden dosya adı nasıl alınır?

Örneğin, bir dosya yolu dizem varsa

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

ve dönüş sonucunu şu şekilde almak istiyorum

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

Yardımın için teşekkürler.

Yanıtlar:


164

Hedef C

NSString* theFileName = [string lastPathComponent]

Swift

let theFileName = (string as NSString).lastPathComponent

1
String = (NSString olarak string) .lastPathComponent: var theFileName: NSString = string.lastPathComponent // veya var theFileName belki böyle, NSString için sadece çalıştığını Swift de vurgulamak gerekir
babac

3
URLStringNSString
Swift'de

32

SWIFT 3.x veya SWIFT 4: Bunu yapmanın en kısa ve en temiz yolu aşağıdadır. Bu örnekte, urldeğişken türü, URLbu şekilde, beğenilir ve Beğenilmez Stringuzantılı tam dosya adının insan tarafından okunabilir bir sonucunu elde edebiliriz.My file name.txtMy%20file%20name.txt

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

2
bu her zaman görüntüler için asset.JPG'yi döndürür.
Sert Nigam

Swift 3'ü içeren ve daha tutarlı olan Swift 2 yanıtına bakın.
Tyler A.

benimki de - @HarshNigam
Daniel Pereira

29

Günlüğe kaydetme gibi mevcut dosya adını almak istiyorsanız, bunu kullanıyorum.

Swift 4

URL(fileURLWithPath: #file).lastPathComponent

1
Bilmekte fayda var: init(fileURLWithPath path: __shared String, isDirectory: Bool)Ekstra dosya sistemi erişimini önlemek için kullanın . Dokümanlardan: Bu işlev, dosya URL'sinin bir dizin olup olmadığını kontrol etmek için fazladan dosya sistemi erişimini önler. Cevabı zaten biliyorsanız kullanmalısınız.
Mark

24

Swift 2:

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

Bu, derleyicinin lastPathComponentbir swift'i çağırırsanız String(yayınlamanın aksine NSString) kullanmasını söylediği yöntemdir .
i_am_jorf

Bilmekte fayda var: init(fileURLWithPath path: __shared String, isDirectory: Bool)Ekstra dosya sistemi erişimini önlemek için kullanın . Dokümanlardan: Bu işlev, dosya URL'sinin bir dizin olup olmadığını kontrol etmek için fazladan dosya sistemi erişimini önler. Cevabı zaten biliyorsanız kullanmalısınız.
Mark

14

Bunu dene

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

Güncellenmiş :

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

Umarım yardımcı olur.


11

Swift 4.X'te aşağıdaki kod benim için çalışıyor

 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

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

Bunun çalışması için, url'nizin bir dizge değil, URL türünde olması gerekir, bu nedenle elden önce bir dizeye dönüştürmeyin.

Nasıl çalıştığını görmek için bu kodu kopyalayıp doğrudan oyun alanına yapıştırabilirsiniz.


4

Aşağıda yaptığım gibi url'yi fileUrl'de iletebilirsiniz: -

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

// Bu son yol bileşeni size uzantılı dosya Adı sağlayacaktır.


1
Bu biraz takdir edilen bir kod cevabıdır. Lütfen biraz açıklama ekleyin. Bu, olumlu oy alma şansınızı artıracak ve ayrıca programlama işini burada ücretsiz olarak yapabileceğiniz yanılgısıyla mücadeleye yardımcı olacaktır.
Yunnosch

1

Önceki iki klasörü içeren benzersiz "dosya adı" form url'si oluşturur

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

Dosya adını uzantısı olmadan Swift> = 4.2'deki bir URL'den almak için:

let urlWithoutFileExtension: URL =  originalFileUrl.deletingPathExtension()
let fileNameWithoutExtension: String = urlWithoutFileExtension.lastPathComponent
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.