files.js 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  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. }
  56. /**
  57. * 路径是否存在
  58. * @param {string} dir 路径
  59. */
  60. export async function isDir(dir) {
  61. let isExists = await getStat(dir);
  62. //如果该路径且不是文件,返回true
  63. if (isExists && isExists.isDirectory()) {
  64. return true;
  65. }
  66. return false;
  67. }
  68. export function isFileSync(filePath) {
  69. try {
  70. const fullPath = path.resolve(filePath);
  71. const stats = fs.statSync(fullPath);
  72. return stats.isFile();
  73. } catch (error) {
  74. return false;
  75. }
  76. }