Як швидко отримати ім'я файлу з файла


98

Як отримати ім'я файлу з заданого рядка шляху файлу?

Наприклад, якщо у мене є рядок 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 

Дякую за твою допомогу.

Відповіді:


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
у Свіфті місцевими іменами настійно пропонується керувати як 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 для зображень.
Суворий Нігам

Дивіться відповідь Swift 2, яка включає Swift 3 і є більш узгодженою.
Тайлер А.

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

29

Якщо ви хочете отримати ім'я поточного файлу, наприклад, для ведення журналів, я використовую це.

Швидкий 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!

Це метод, який компілятор говорить, щоб використовувати, якщо ви запускаєте 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

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

Ви можете передати 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.