ToLinux
路径统一成linux路径, 即 "\" 替换成 "/"
func toLinux(path string) string {
return strings.ReplaceAll(path, "\\", "/")
}
RootPath
获取程序运行路径
func rootPath() string {
var fp, _ = filepath.Abs(path.Dir(os.Args[0]))
return fp
}
ToAbsolutePath
将相对路径转换成绝对路径
func ToAbsolutePath(p string) string {
if "" == p || "." == p { return toLinux(rootPath()) }
var linuxPath = toLinux(p)
var paths = strings.Split(linuxPath, "/")
var rp string
if 0 < len(paths) {
switch (paths[0]) {
case "" : fallthrough
case "." : fallthrough
case "..": rp = toLinux(rootPath())
}
}
var realPaths []string
if "" != rp {
realPaths = strings.Split(rp, "/")
if 0 < len(realPaths) && realPaths[0] == "" { realPaths[0]="/" }
}
if 0 < len(paths) {
realPaths = append(realPaths, paths...)
}
return path.Join(realPaths...)
}
示例
fmt.Println(ToAbsolutePath(ToAbsolutePath("./hello"))) // E:/Code/Golang/test/bin/hello
fmt.Println(ToAbsolutePath(ToAbsolutePath("../hello"))) // E:/Code/Golang/test/hello
fmt.Println(ToAbsolutePath(ToAbsolutePath("../../hello"))) // E:/Code/Golang/hello
fmt.Println(ToAbsolutePath(ToAbsolutePath("E:/hello"))) // // E:/hello