迅速にファイルパスからファイル名を取得する方法


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 

ご協力ありがとうございました。

回答:


163

目的C

NSString* theFileName = [string lastPathComponent]

迅速

let theFileName = (string as NSString).lastPathComponent

1
たぶん、これは次のようにNSStringでのみ機能することをSwiftで強調表示する必要があります:var theFileName:NSString = string.lastPathComponent //またはvar theFileName:String =(string as NSString).lastPathComponent
Babac

3
Swiftでは、ローカルファイル名をsまたはs ではなくs として管理することを強くお勧めしますURLStringNSString
bshirley

32

SWIFT 3.xまたはSWIFT 4:これを行うための最短かつクリーンな方法は以下のとおりです。この例では、url変数のタイプはURLこのようにしており、String拡張子like My file name.txtとNot like を含む完全なファイル名の人間が読める結果を得ることができます。My%20file%20name.txt

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

2
これは常に画像のasset.JPGを返します。
Harsh Nigam

Swift 3を含み、より首尾一貫したSwift 2の回答を参照してください。
タイラーA.

鉱山も-@HarshNigam
ダニエル・ペレイラ

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 を呼び出す場合にコンパイラが使用するメソッドです。StringNSString
i_am_jorf 2016年

知っておきたいこと: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タイプである必要があるため、事前に文字列に変換しないでください。

このコードを直接コピーしてプレイグラウンドに貼り付け、どのように機能するかを確認できます。


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
これは少し高く評価されたコードのみの回答です。説明を追加してください。これにより、賛成投票の可能性が高まり、ここでプログラミング作業を無料で行うことができるという誤解と戦うことができます。
ユンノシュ

1

以前の2つのフォルダを含む一意の「ファイル名」フォーム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

Swift 4.2以降のURLから拡張子なしのファイル名を取得するには:

let urlWithoutFileExtension: URL =  originalFileUrl.deletingPathExtension()
let fileNameWithoutExtension: String = urlWithoutFileExtension.lastPathComponent
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.