package utils import ( "os" "os/exec" "path/filepath" "strings" "errors" ) func GetCurrentDir() string { file, err := exec.LookPath(os.Args[0]) if err != nil { c, _ := os.Getwd() return c } return strings.Replace(filepath.Dir(file), "\\", "/", -1) } func GetAbsolutePath(path string) string { p := GetAbsolutePathNoFilter(path) p = strings.Replace(p, "\\", "/", -1) // 统一使用/ for { a := strings.Index(p, "//") if a == -1 { break } p = strings.Replace(p, "//", "/", -1) } return p } func GetAbsolutePathNoFilter(path string) string { if strings.Index(path, "file:/") == 0 { path = path[5:] mpos := strings.Index(path, ":") if mpos >= 0 { //去除开头斜杠, 如: ///C:/test for { if len(path) > 0 && (path[0] == '/' || path[0] == '\\') { path = path[1:] } else { break } } return (path) } for { if len(path) > 1 && (path[0] == '/' || path[0] == '\\') && (path[1] == '/' || path[1] == '\\') { path = path[1:] } else { break } } path, _ = filepath.Abs(path) return (path) } else if strings.Index(path, "./") == 0 || strings.Index(path, ".\\") == 0 { r, _ := filepath.Abs(GetCurrentDir() + path[1:]) return (r) } r, _ := filepath.Abs(path) return (r) } func GetDir(path string) string { if strings.Index(path, "./") == 0 || strings.Index(path, ".\\") == 0 { return filepath.ToSlash(filepath.Dir(GetCurrentDir() + path[1:])) } return filepath.ToSlash(filepath.Dir(path)) } func EnsureDir(dir string) string { fullDir := GetAbsolutePath(dir) if IsExists(fullDir) { return fullDir } os.MkdirAll(fullDir, 777) return fullDir } func EnsureFilePath(filePath string) string { filePath = GetAbsolutePath(filePath) EnsureDir(GetDir(filePath)) return filePath } func IsExists(path string) bool { if path == "" { return false } _, err := os.Stat(path) if err != nil && os.IsNotExist(err) { return false } return true } /****************************************************************************** * * @Function Name : GetCurrentPath *----------------------------------------------------------------------------- * * @Description : windows下获取传入相对路径的绝对路径 * * @Function Parameters : dir 相对路径 * * @Return Value : string 绝对路径 * * @Return Value : error 执行出现的错误 * * @Author : zhangxin * * @Date : 2021-03-19 * ******************************************************************************/ func GetCurrentPath(dir string) (string, error) { file, err := exec.LookPath(os.Args[0]) if err != nil { return "", err } path, err := filepath.Abs(file) if err != nil { return "", err } i := strings.LastIndex(path, "/") if i < 0 { i = strings.LastIndex(path, "\\") } if i < 0 { return "", errors.New(`error: Can't find "/" or "\".`) } pathdir := path[0 : i+1] if len(dir) > 0 { dir = strings.Replace(dir, "/", "\\", -1) return filepath.Join(pathdir, dir), nil } return path[0 : i+1], nil }