pwd.go 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. package file
  2. import (
  3. "fmt"
  4. "os"
  5. "os/exec"
  6. "path/filepath"
  7. "strings"
  8. )
  9. // 当前执行脚本路径
  10. func GetCurPath() string {
  11. path, _ := exec.LookPath(os.Args[0])
  12. base := filepath.Base(path)
  13. path, _ = filepath.Abs(path)
  14. return strings.TrimSuffix(path, "/"+base)
  15. }
  16. // 项目根路径,携带有项目名称
  17. func GetRootPath() string {
  18. dir, _ := os.Getwd()
  19. return dir
  20. }
  21. func GetFilePath(fileName string) (string, error) {
  22. // 当前执行脚本路径
  23. var curPath = func() string {
  24. path, _ := exec.LookPath(os.Args[0])
  25. path, _ = filepath.Abs(path)
  26. return filepath.Dir(path)
  27. }
  28. // 项目根路径,携带有项目名称
  29. var rootPath = func() string {
  30. path, _ := os.Getwd()
  31. return path
  32. }
  33. // 判断文件是否存在
  34. var exist = func(filename string) bool {
  35. _, err := os.Stat(filename)
  36. return err == nil || os.IsExist(err)
  37. }
  38. str, _ := filepath.Abs(fileName)
  39. if exist(str) {
  40. return str, nil
  41. }
  42. if strings.HasPrefix(fileName, "/") {
  43. if !exist(fileName) {
  44. return "", fmt.Errorf("%s not fond", fileName)
  45. }
  46. return fileName, nil
  47. }
  48. path1 := filepath.Clean(fmt.Sprintf("%s/%s", rootPath(), fileName))
  49. if !exist(path1) {
  50. path2 := filepath.Clean(fmt.Sprintf("%s/%s", curPath(), fileName))
  51. if !exist(path2) {
  52. return "", fmt.Errorf("%s and %s not fond", path1, path2)
  53. }
  54. return path2, nil
  55. }
  56. return path1, nil
  57. }