Jak szybko pobrać nazwę pliku ze ścieżki pliku

98

Jak uzyskać nazwę pliku z podanego ciągu ścieżki pliku?

Na przykład, jeśli mam ciąg ścieżki pliku jako

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

i chciałbym otrzymać wynik jako

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

Dziękuję za pomoc.

Ralph
źródło

Odpowiedzi:

163

Cel C

NSString* theFileName = [string lastPathComponent]

Szybki

let theFileName = (string as NSString).lastPathComponent
Sujith Chandran
źródło
1
może powinieneś podkreślić w Swift, że działa to tylko dla NSString, na przykład: var theFileName: NSString = string.lastPathComponent // lub var theFileName: String = (string as NSString) .lastPathComponent
Babac
3
w Swift, lokalne nazwy plików są wysoce wskazane być zarządzane jako URLs, a nie Strings lub NSStrings
bshirley
32

SWIFT 3.x lub SWIFT 4: Najkrótszy i najczystszy sposób, aby to zrobić, znajduje się poniżej. W tym przykładzie urlzmienna jest typem URLw ten sposób możemy otrzymać czytelny dla człowieka Stringwynik pełnej nazwy pliku z rozszerzeniem jak My file name.txti Nie podobaMy%20file%20name.txt

// Result like: My file name.txt
let fileName = url.lastPathComponent
Trevor
źródło
2
to zawsze zwraca plik asset.JPG dla obrazów.
Harsh Nigam
Zobacz odpowiedź Swift 2, która obejmuje Swift 3 i jest bardziej spójna.
Tyler A.
moje też - @HarshNigam
Daniel Pereira
29

Jeśli chcesz uzyskać aktualną nazwę pliku, na przykład do celów logowania, używam tego.

Szybki 4

URL(fileURLWithPath: #file).lastPathComponent
Jose Ramirez
źródło
1
Warto wiedzieć: użyj, init(fileURLWithPath path: __shared String, isDirectory: Bool)aby uniknąć dodatkowego dostępu do systemu plików. Z dokumentacji: Ta funkcja pozwala uniknąć dodatkowego dostępu do systemu plików w celu sprawdzenia, czy adres URL pliku jest katalogiem. Powinieneś go użyć, jeśli znasz już odpowiedź.
Mark
24

Swift 2:

var file_name = NSURL(fileURLWithPath: path_to_file).lastPathComponent!
Vingtoft
źródło
Jest to metoda, o której kompilator mówi, że ma być używana, gdy wywołujesz lastPathComponentswift String(w przeciwieństwie do rzutowania NSString).
i_am_jorf
Warto wiedzieć: użyj, init(fileURLWithPath path: __shared String, isDirectory: Bool)aby uniknąć dodatkowego dostępu do systemu plików. Z dokumentacji: Ta funkcja pozwala uniknąć dodatkowego dostępu do systemu plików w celu sprawdzenia, czy adres URL pliku jest katalogiem. Powinieneś go użyć, jeśli znasz już odpowiedź.
Mark
14

Spróbuj tego

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

Zaktualizowano:

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

Mam nadzieję, że to pomoże.

Pradumna Patil
źródło
11

Poniższy kod działa dla mnie w 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
Ashu
źródło
5
let theURL = URL(string: "yourURL/somePDF.pdf")  //use your URL
let fileNameWithExt = theURL?.lastPathComponent //somePDF.pdf
let fileNameLessExt = theURL?.deletingPathExtension().lastPathComponent //somePDF

Aby to zadziałało, twój adres URL musi być typu URL, a nie ciągiem, więc nie konwertuj go wcześniej na ciąg.

Możesz skopiować i wkleić ten kod bezpośrednio do placu zabaw, aby zobaczyć, jak to działa.

Robac
źródło
4

Możesz przekazać adres URL w fileUrl, tak jak zrobiłem poniżej: -

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

// Ten ostatni składnik ścieżki zapewni nazwę pliku z rozszerzeniem.

Nishant Sharma
źródło
1
To mało doceniana odpowiedź zawierająca tylko kod. Proszę dodać wyjaśnienie. Zwiększy to Twoje szanse na pozytywne głosy, a także pomoże w walce z błędnym przekonaniem, że prace programistyczne można tu wykonać bezpłatnie.
Yunnosch
1

Tworzy unikalny adres URL „nazwy pliku” zawierający dwa poprzednie foldery

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

}

Pvlub
źródło
1

Aby pobrać nazwę pliku bez rozszerzenia z adresu URL w Swift> = 4.2:

let urlWithoutFileExtension: URL =  originalFileUrl.deletingPathExtension()
let fileNameWithoutExtension: String = urlWithoutFileExtension.lastPathComponent
Taiwosam
źródło