如何快速从文件路径获取文件名


98

如何从给定的文件路径字符串获取文件名?

例如,如果我有一个文件路径字符串为

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 

谢谢您的帮助。

Answers:


163

目标C

NSString* theFileName = [string lastPathComponent]

迅速

let theFileName = (string as NSString).lastPathComponent

1
也许您应该在Swift中强调这仅适用于NSString,例如:var theFileName:NSString = string.lastPathComponent //或var theFileName:String =(字符串作为NSString).lastPathComponent
Babac

3
在Swift中,强烈建议将本地文件名以URLs而不是Strings或NSStrings 进行管理
bshirley18

32

SWIFT 3.x或SWIFT 4:最简单的方法如下。在这个例子中,url变量是这种类型的URL,我们可以得到String完整文件名的人类可读结果,扩展名为like My file name.txt和Not likeMy%20file%20name.txt

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

2
这总是返回图片的asset.JPG。
严苛的Nigam

请参阅Swift 2的答案,其中包括Swift 3,并且更加连贯。
泰勒A.17年

也是我的-@HarshNigam
Daniel Pereira

28

如果要获取当前文件名(例如出于日志记录目的),请使用此文件。

斯威夫特4

URL(fileURLWithPath: #file).lastPathComponent

1
提提您:init(fileURLWithPath path: __shared String, isDirectory: Bool)避免额外的文件系统访问。从文档:此功能避免了额外的文件系统访问,以检查文件URL是否是目录。如果您已经知道答案,则应该使用它。
马克

24

斯威夫特2:

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

如果您调用lastPathComponentswift 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

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

为了使其正常工作,您的url必须是URL类型而不是字符串,因此请不要在事前将其转换为字符串。

您可以将此代码直接复制并粘贴到Playground中,以查看其工作方式。


4

您可以在fileUrl中传递url,就像我在下面所做的那样:-

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

创建包含两个先前文件夹的唯一“文件名”表单网址

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

要从Swift> = 4.2中的URL检索没有扩展名的文件名:

let urlWithoutFileExtension: URL =  originalFileUrl.deletingPathExtension()
let fileNameWithoutExtension: String = urlWithoutFileExtension.lastPathComponent
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.