Cách lấy tên tệp từ đường dẫn tệp nhanh chóng


98

Làm cách nào để lấy tên tệp từ chuỗi đường dẫn tệp đã cho?

Ví dụ: nếu tôi có một chuỗi đường dẫn tệp là

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

và tôi muốn nhận được kết quả trả về là

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

Cảm ơn sự giúp đỡ của bạn.

Câu trả lời:


163

Mục tiêu C

NSString* theFileName = [string lastPathComponent]

Nhanh

let theFileName = (string as NSString).lastPathComponent

1
có lẽ bạn nên làm nổi bật trong Swift rằng điều này chỉ làm việc cho NSString, như: var theFileName: NSString = string.lastPathComponent // hoặc var theFileName: String = (string như NSString) .lastPathComponent
Babac

3
trong Swift, tên tập tin địa phương được đánh giá cao đề nghị phải được quản lý như URLs, không phải là Strings hoặc NSStrings
bshirley

32

SWIFT 3.x hoặc SWIFT 4: Dưới đây là cách ngắn nhất và rõ ràng nhất để thực hiện việc này. Trong ví dụ này, urlbiến là kiểu URLtheo cách này, chúng ta có thể có Stringkết quả có thể đọc được của con người về tên tệp đầy đủ với phần mở rộng như My file name.txtvà Không thíchMy%20file%20name.txt

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

2
điều này luôn trả về tài sản.JPG cho hình ảnh.
Harsh Nigam

Xem câu trả lời Swift 2 bao gồm Swift 3 và mạch lạc hơn.
Tyler A.

của tôi cũng vậy - @HarshNigam
Daniel Pereira

28

Nếu bạn muốn lấy tên tệp hiện tại, chẳng hạn như cho mục đích ghi nhật ký, tôi sử dụng cái này.

Swift 4

URL(fileURLWithPath: #file).lastPathComponent

1
Điều cần biết: sử dụng init(fileURLWithPath path: __shared String, isDirectory: Bool)để tránh truy cập thêm vào hệ thống tệp. Từ tài liệu: Chức năng này tránh truy cập thêm vào hệ thống tệp để kiểm tra xem URL của tệp có phải là một thư mục hay không. Bạn nên sử dụng nó nếu bạn đã biết câu trả lời.
Đánh dấu

24

Swift 2:

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

Đây là phương thức mà trình biên dịch nói sẽ sử dụng nếu bạn gọi lastPathComponentnhanh String(trái ngược với truyền tới NSString).
i_am_jorf

Điều cần biết: sử dụng init(fileURLWithPath path: __shared String, isDirectory: Bool)để tránh truy cập thêm vào hệ thống tệp. Từ tài liệu: Chức năng này tránh truy cập thêm vào hệ thống tệp để kiểm tra xem URL của tệp có phải là một thư mục hay không. Bạn nên sử dụng nó nếu bạn đã biết câu trả lời.
Đánh dấu

14

Thử cái này

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

Đã cập nhật:

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

Hy vọng nó giúp.


11

Đoạn mã dưới đây đang hoạt động đối với tôi trong 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

Để điều này hoạt động, url của bạn phải thuộc loại URL không phải là một chuỗi, vì vậy đừng chuyển đổi nó thành một chuỗi trước đó.

Bạn có thể sao chép và dán mã này trực tiếp vào sân chơi để xem nó hoạt động như thế nào.


4

Bạn có thể chuyển url trong fileUrl, như tôi đã làm dưới đây: -

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

// Thành phần đường dẫn cuối cùng này sẽ cung cấp cho bạn Tên tệp với phần mở rộng.


1
Đây là một câu trả lời chỉ có mã ít được đánh giá cao. Vui lòng thêm một số giải thích. Điều đó sẽ cải thiện cơ hội nhận được phiếu tán thành của bạn và cũng giúp chống lại quan niệm sai lầm rằng bạn có thể hoàn thành công việc lập trình ở đây miễn phí.
Yunnosch

1

Tạo url biểu mẫu "tên tệp" duy nhất bao gồm hai thư mục trước đó

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

Để truy xuất tên tệp không có phần mở rộng của nó từ một URL trong Swift> = 4.2:

let urlWithoutFileExtension: URL =  originalFileUrl.deletingPathExtension()
let fileNameWithoutExtension: String = urlWithoutFileExtension.lastPathComponent
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.