85 lines
1.7 KiB
Go
85 lines
1.7 KiB
Go
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
|
||
}
|