dir.go 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. package files
  2. import (
  3. "io/fs"
  4. "os"
  5. "path/filepath"
  6. )
  7. // CheckAndCreateDir 检查文件夹是否存在,不存在则创建(包括各级父目录)
  8. func CheckAndCreateDir(dirPath string) error {
  9. // 检查文件夹是否存在
  10. _, err := os.Stat(dirPath)
  11. if err == nil {
  12. // 文件夹已存在
  13. return nil
  14. }
  15. // 判断错误类型是否为不存在
  16. if os.IsNotExist(err) {
  17. // 创建文件夹,0755表示权限:所有者可读写执行,组和其他用户可读执行
  18. // MkdirAll会递归创建所有不存在的父目录
  19. err := os.MkdirAll(dirPath, 0755)
  20. if err != nil {
  21. return err
  22. }
  23. return nil
  24. }
  25. // 其他错误(如权限问题等)
  26. return err
  27. }
  28. // ListFiles 遍历目录下的所有文件(递归)
  29. // 参数:
  30. //
  31. // root - 起始目录
  32. // onlyFiles - 是否只返回文件(true: 不包含目录)
  33. func ListFiles(root string, onlyFiles bool) ([]string, error) {
  34. var files []string
  35. err := filepath.WalkDir(root, func(path string, d fs.DirEntry, err error) error {
  36. if err != nil {
  37. return err
  38. }
  39. // 跳过目录时
  40. if d.IsDir() && onlyFiles {
  41. return nil
  42. }
  43. files = append(files, path)
  44. return nil
  45. })
  46. return files, err
  47. }