|
|
- 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
- }
|