วิธีรับชื่อไฟล์จาก filepath อย่างรวดเร็ว


99

วิธีรับชื่อไฟล์จากสตริงเส้นทางไฟล์ที่กำหนด

ตัวอย่างเช่นถ้าฉันมีสตริง filepath เป็น

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

และฉันต้องการได้ผลลัพธ์กลับเป็น

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

ขอขอบคุณสำหรับความช่วยเหลือของคุณ.

คำตอบ:


166

วัตถุประสงค์ค

NSString* theFileName = [string lastPathComponent]

รวดเร็ว

let theFileName = (string as NSString).lastPathComponent

1
บางทีคุณควรเน้นใน Swift ว่าใช้งานได้กับ NSString เท่านั้นเช่น: var theFileName: NSString = string.lastPathComponent // หรือ var theFileName: String = (string as NSString) .lastPathComponent
Babac

3
ใน Swift ขอแนะนำให้จัดการชื่อไฟล์ในเครื่องเป็นURLs ไม่ใช่Strings หรือNSStrings
bshirley

32

SWIFT 3.x หรือ SWIFT 4: วิธีที่สั้นที่สุดและสะอาดที่สุดอยู่ด้านล่าง ในurlตัวแปรตัวอย่างนี้เป็นประเภทURLในลักษณะนี้เราสามารถมีStringผลลัพธ์ที่มนุษย์สามารถอ่านได้ของชื่อไฟล์แบบเต็มที่มีนามสกุลเหมือนMy file name.txtและไม่เหมือนMy%20file%20name.txt

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

2
สิ่งนี้จะส่งคืนสินทรัพย์เสมอ JPG สำหรับรูปภาพ
Harsh Nigam

ดูคำตอบของ Swift 2 ซึ่งรวมถึง Swift 3 และสอดคล้องกันมากขึ้น
Tyler A.

ของฉันด้วย - @HarshNigam
Dansp

30

หากคุณต้องการรับชื่อไฟล์ปัจจุบันเช่นเพื่อวัตถุประสงค์ในการบันทึกฉันใช้สิ่งนี้

สวิฟต์ 4

URL(fileURLWithPath: #file).lastPathComponent

1
นานาน่ารู้: ใช้init(fileURLWithPath path: __shared String, isDirectory: Bool)เพื่อหลีกเลี่ยงการเข้าถึงระบบไฟล์เพิ่มเติม จากเอกสาร: ฟังก์ชันนี้หลีกเลี่ยงการเข้าถึงระบบไฟล์เพิ่มเติมเพื่อตรวจสอบว่า URL ของไฟล์เป็นไดเร็กทอรีหรือไม่ คุณควรใช้ถ้าคุณรู้คำตอบอยู่แล้ว
ทำเครื่องหมาย

24

Swift 2:

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

นี่เป็นวิธีที่คอมไพเลอร์บอกว่าจะใช้ถ้าคุณเรียกlastPathComponentใช้สวิฟต์String(ซึ่งตรงข้ามกับการแคสต์NSString)
i_am_jorf

นานาน่ารู้: ใช้init(fileURLWithPath path: __shared String, isDirectory: Bool)เพื่อหลีกเลี่ยงการเข้าถึงระบบไฟล์เพิ่มเติม จากเอกสาร: ฟังก์ชันนี้หลีกเลี่ยงการเข้าถึงระบบไฟล์เพิ่มเติมเพื่อตรวจสอบว่า URL ของไฟล์เป็นไดเร็กทอรีหรือไม่ คุณควรใช้ถ้าคุณรู้คำตอบอยู่แล้ว
ทำเครื่องหมาย

14

ลองทำตามนี้

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

อัปเดต:

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

หวังว่าจะช่วยได้


11

โค้ดด้านล่างใช้งานได้สำหรับฉันใน 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

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

เพื่อให้สิ่งนี้ใช้งานได้ URL ของคุณต้องเป็นประเภท URL ไม่ใช่สตริงดังนั้นอย่าแปลงเป็นสตริงก่อนส่ง

คุณสามารถคัดลอกและวางรหัสนี้ลงในสนามเด็กเล่นได้โดยตรงเพื่อดูวิธีการทำงาน


4

คุณสามารถส่ง url ใน fileUrl เช่นที่ฉันทำด้านล่าง: -

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

// คอมโพเนนต์พา ธ สุดท้ายนี้จะให้ชื่อไฟล์พร้อมนามสกุล


1
นี่เป็นคำตอบสำหรับโค้ดเท่านั้นที่น่าชื่นชม กรุณาเพิ่มคำอธิบาย ซึ่งจะช่วยเพิ่มโอกาสในการรับโหวตและยังช่วยต่อสู้กับความเข้าใจผิดที่ว่าคุณสามารถทำงานเขียนโปรแกรมให้เสร็จได้ที่นี่โดยไม่เสียค่าใช้จ่าย
Yunnosch

1

สร้าง URL ฟอร์ม "ชื่อไฟล์" ที่ไม่ซ้ำใครรวมถึงโฟลเดอร์ก่อนหน้าสองโฟลเดอร์

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

ในการดึงชื่อไฟล์ที่ไม่มีนามสกุลจาก URL ใน Swift> = 4.2:

let urlWithoutFileExtension: URL =  originalFileUrl.deletingPathExtension()
let fileNameWithoutExtension: String = urlWithoutFileExtension.lastPathComponent
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.