incredible-go-core/pkg/io/files/file_name_utils.go

85 lines
1.7 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package files
import (
"path/filepath"
"slices"
"strings"
"git.tswf.io/incredible-go/incredible-go-core/pkg/collections/array_list"
)
var RestrictedFilepathCharactersReplacements = map[string]string{
"<": "",
">": "",
":": "",
"\"": "",
"/": "",
"\\": "",
"|": "",
"?": "",
"*": "",
}
func GetSimpleName(filePath string) string {
return SplitFileName(filePath).GetLast()
}
func GetExtension(filePath string) string {
split := strings.Split(filePath, ".")
if len(split) == 1 {
return ""
}
return split[len(split)-1]
}
func GetSimpleNameWithoutExtension(filePath string) string {
simpleName := GetSimpleName(filePath)
split := slices.DeleteFunc(strings.Split(simpleName, "."), func(s string) bool {
return s == ""
})
if len(split) == 1 {
return filePath
}
return strings.Join(split[:len(split)-1], "")
}
func SplitFileName(filePath string) *array_list.ArrayList[string] {
filePath = filepath.ToSlash(filePath)
split := strings.Split(filePath, "/")
return array_list.NewArrayListWithContent[string](split...)
}
func ReplaceAllRestrictedCharacters(filePath string) string {
for k, v := range RestrictedFilepathCharactersReplacements {
filePath = strings.ReplaceAll(filePath, k, v)
}
return filePath
}
func ReplaceAllRestrictedCharactersNoSlashes(filePath string) string {
for k, v := range RestrictedFilepathCharactersReplacements {
if k == "\\" || k == "/" {
continue
}
filePath = strings.ReplaceAll(filePath, k, v)
}
return filePath
}
func TryAbs(filePath string) string {
if !filepath.IsAbs(filePath) {
abs, err := filepath.Abs(filePath)
if err == nil {
return abs
}
}
return filePath
}