Как быстро получить имя файла из пути к файлу


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 

Спасибо за помощь.

Ответы:


165

Цель C

NSString* theFileName = [string lastPathComponent]

Swift

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
это всегда возвращает asset.JPG для изображений.
Harsh Nigam

См. Ответ Swift 2, который включает Swift 3 и является более последовательным.
Тайлер А.

мой тоже - @HarshNigam
Даниэль Перейра

29

Если вы хотите получить текущее имя файла, например, для ведения журнала, я использую это.

Swift 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
Это малоизвестный ответ, состоящий только из кода. Пожалуйста, добавьте пояснение. Это повысит ваши шансы на получение голосов, а также поможет бороться с неправильным представлением о том, что здесь можно выполнять программирование бесплатно.
Юннош

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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.