files.js 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import fs from "node:fs";
  2. import path from "path";
  3. /**
  4. * 读取路径信息
  5. * @param {string} path 路径
  6. */
  7. export function getStat(path) {
  8. return new Promise((resolve, reject) => {
  9. fs.stat(path, (err, stats) => {
  10. if (err) {
  11. resolve(false);
  12. } else {
  13. resolve(stats);
  14. }
  15. })
  16. })
  17. }
  18. /**
  19. * 创建路径
  20. * @param {string} dir 路径
  21. */
  22. export function mkdir(dir) {
  23. return new Promise((resolve, reject) => {
  24. fs.mkdir(dir, err => {
  25. if (err) {
  26. resolve(false);
  27. } else {
  28. resolve(true);
  29. }
  30. })
  31. })
  32. }
  33. /**
  34. * 路径是否存在,不存在则创建
  35. * @param {string} dir 路径
  36. */
  37. export async function dirExists(dir) {
  38. let isExists = await getStat(dir);
  39. //如果该路径且不是文件,返回true
  40. if (isExists && isExists.isDirectory()) {
  41. return true;
  42. } else if (isExists) {
  43. //如果该路径存在但是文件,返回false
  44. return false;
  45. }
  46. //如果该路径不存在,拿到上级路径
  47. let tempDir = path.parse(dir).dir;
  48. //递归判断,如果上级目录也不存在,则会代码会在此处继续循环执行,直到目录存在
  49. let status = await dirExists(tempDir);
  50. let mkdirStatus;
  51. if (status) {
  52. mkdirStatus = await mkdir(dir);
  53. }
  54. return mkdirStatus;
  55. }