path.go 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. // Author: NiuJiuRu
  2. // Email: niujiuru@qq.com
  3. package baseapp
  4. import (
  5. "fmt"
  6. "os"
  7. "os/exec"
  8. "path/filepath"
  9. )
  10. // 当前可执行文件的路径
  11. var EXEC_DIR string
  12. // 当前可执行文件的名字
  13. var EXEC_FILENAME string
  14. // 配置文件路径
  15. var CFG_DIR string
  16. // 程序日志目录
  17. var LOG_DIR string
  18. // 记录运行状态
  19. var RUN_DIR string
  20. // 变动缓存文件
  21. var VAR_DIR string
  22. // 相机图片目录
  23. var IMG_DIR string
  24. // 可选目录创建
  25. var OptDirs = struct {
  26. Cfg bool
  27. Run bool
  28. Var bool
  29. Img bool
  30. }{Cfg: true, Run: true, Var: true, Img: true}
  31. func SetOptDirs(cfgEnabled, runEnabled, varEnabled, imgEnabled bool) {
  32. OptDirs.Cfg = cfgEnabled
  33. OptDirs.Run = runEnabled
  34. OptDirs.Var = varEnabled
  35. OptDirs.Img = imgEnabled
  36. }
  37. func InitPath() {
  38. initPath(false)
  39. }
  40. func InitPathReal() {
  41. initPath(true)
  42. }
  43. func initPath(resolveSymlink bool) {
  44. file, err := exec.LookPath(os.Args[0])
  45. if err != nil {
  46. fmt.Printf("An error occurred while calling the exec.LookPath() function: %v\n", err)
  47. os.Exit(1)
  48. }
  49. path, err := filepath.Abs(file)
  50. if err != nil {
  51. fmt.Printf("An error occurred while calling the filepath.Abs() function: %v\n", err)
  52. os.Exit(1)
  53. }
  54. if resolveSymlink { // 解析符号链接
  55. path, err = filepath.EvalSymlinks(path)
  56. if err != nil {
  57. fmt.Printf("An error occurred while calling the filepath.EvalSymlinks() function: %v\n", err)
  58. os.Exit(1)
  59. }
  60. }
  61. EXEC_DIR = filepath.Dir(path)
  62. EXEC_FILENAME = filepath.Base(path)
  63. CFG_DIR = filepath.Join(EXEC_DIR, "config")
  64. LOG_DIR = filepath.Join(EXEC_DIR, "log")
  65. RUN_DIR = filepath.Join(EXEC_DIR, "status")
  66. VAR_DIR = filepath.Join(EXEC_DIR, "var")
  67. IMG_DIR = filepath.Join(EXEC_DIR, "cam_img")
  68. createDirs := []string{LOG_DIR}
  69. if OptDirs.Cfg {
  70. createDirs = append(createDirs, CFG_DIR)
  71. }
  72. if OptDirs.Run {
  73. createDirs = append(createDirs, RUN_DIR)
  74. }
  75. if OptDirs.Var {
  76. createDirs = append(createDirs, VAR_DIR)
  77. }
  78. if OptDirs.Img {
  79. createDirs = append(createDirs, IMG_DIR)
  80. }
  81. for _, dir := range createDirs {
  82. if err := ExistsDir(dir, true); err != nil {
  83. fmt.Printf("Failed to create the %s directory: %v\n", dir, err)
  84. os.Exit(1)
  85. }
  86. }
  87. }
  88. func ExistsDir(dir string, create bool) error {
  89. var err error
  90. _, err = os.Stat(dir)
  91. if os.IsNotExist(err) && create {
  92. err = os.MkdirAll(dir, os.ModePerm)
  93. }
  94. return err
  95. }