// Author: NiuJiuRu // Email: niujiuru@qq.com package baseapp import ( "fmt" "os" "os/exec" "path/filepath" ) // 当前可执行文件的路径 var EXEC_DIR string // 当前可执行文件的名字 var EXEC_FILENAME string // 配置文件路径 var CFG_DIR string // 程序日志目录 var LOG_DIR string // 记录运行状态 var RUN_DIR string // 变动缓存文件 var VAR_DIR string // 相机图片目录 var IMG_DIR string // 可选目录创建 var OptDirs = struct { Cfg bool Run bool Var bool Img bool }{Cfg: true, Run: true, Var: true, Img: true} func SetOptDirs(cfgEnabled, runEnabled, varEnabled, imgEnabled bool) { OptDirs.Cfg = cfgEnabled OptDirs.Run = runEnabled OptDirs.Var = varEnabled OptDirs.Img = imgEnabled } func InitPath() { file, err := exec.LookPath(os.Args[0]) if err != nil { fmt.Printf("An error occurred while calling the exec.LookPath() function: %v\n", err) os.Exit(1) } path, err := filepath.Abs(file) if err != nil { fmt.Printf("An error occurred while calling the filepath.Abs() function: %v\n", err) os.Exit(1) } EXEC_DIR = filepath.Dir(path) EXEC_FILENAME = filepath.Base(path) CFG_DIR = filepath.Join(EXEC_DIR, "config") LOG_DIR = filepath.Join(EXEC_DIR, "log") RUN_DIR = filepath.Join(EXEC_DIR, "status") VAR_DIR = filepath.Join(EXEC_DIR, "var") IMG_DIR = filepath.Join(EXEC_DIR, "cam_img") createDirs := []string{LOG_DIR} if OptDirs.Cfg { createDirs = append(createDirs, CFG_DIR) } if OptDirs.Run { createDirs = append(createDirs, RUN_DIR) } if OptDirs.Var { createDirs = append(createDirs, VAR_DIR) } if OptDirs.Img { createDirs = append(createDirs, IMG_DIR) } for _, dir := range createDirs { if err := ExistsDir(dir, true); err != nil { fmt.Printf("Failed to create the %s directory: %v\n", dir, err) os.Exit(1) } } } func ExistsDir(dir string, create bool) error { var err error _, err = os.Stat(dir) if os.IsNotExist(err) && create { err = os.MkdirAll(dir, os.ModePerm) } return err }