Удалить путь из имени файла
У меня есть тривиальный вопрос.
У меня есть строка, которая содержит имя файла и его путь. Как я могу удалить весь путь? Я пробовал:
line = "/some/path/to/remove/file.name"
line := strings.LastIndex(line, "/")
fmt.Println(line)
Он печатает какое-то странное число:
38
Мне нужно это без последней косой черты
большое спасибо
Ответы
Ответ 1
Число - это индекс последней косой черты в строке. Если вы хотите получить базовое имя файла, используйте filepath.Base
:
path := "/some/path/to/remove/file.name"
file := filepath.Base(path)
fmt.Println(file)
Игровая площадка: http://play.golang.org/p/DzlCV-HC-r.
Ответ 2
Можешь попробовать!
dir, file := filepath.Split("/some/path/to/remove/file.name")
fmt.Println("Dir:", dir) //Dir: /some/path/to/remove/
fmt.Println("File:", file) //File: ile.name
Ответ 3
Если вам нужен базовый путь без fileName, вы можете использовать Dir, который описан здесь: https://golang.org/pkg/path/filepath/#Dir
Цитирую часть своей документации:
Dir возвращает все, кроме последнего элемента пути, обычно это каталог пути. После удаления последнего элемента Dir вызывает команду "Очистить путь", а завершающие косые черты удаляются.
Также из их документации, запустив этот код:
package main
import (
"fmt"
"path/filepath"
)
func main() {
fmt.Println("On Unix:")
fmt.Println(filepath.Dir("/foo/bar/baz.js"))
fmt.Println(filepath.Dir("/foo/bar/baz"))
fmt.Println(filepath.Dir("/foo/bar/baz/"))
fmt.Println(filepath.Dir("/dirty//path///"))
fmt.Println(filepath.Dir("dev.txt"))
fmt.Println(filepath.Dir("../todo.txt"))
fmt.Println(filepath.Dir(".."))
fmt.Println(filepath.Dir("."))
fmt.Println(filepath.Dir("/"))
fmt.Println(filepath.Dir(""))
}
даст вам такой вывод:
В Unix: /Foo/бар /Foo/бар /Foo/ бар/Baz /Грязный/путь,.., , /.
Попробуйте сами здесь:
https://play.golang.org/p/huk3EmORFw5
Если вместо этого вы хотите получить fileName без базового пути, @Ainar-G достаточно ответит на это.