Nodejs 简单递归,创建目录,×××××××
Nodejs 简单递归,创建目录,×××××××
var fs = require(‘fs’),
path = require(‘path’)
;
var targetPath = “C:\Users\××××\Desktop\ss\oo\fdfd\palipala\”
;
function mkdir(dir){
var dirname = path.dirname(dir)
;
if(!fs.existsSync(dirname)){
mkdir(dirname);
}
return fs.mkdirSync(dir,0755);
}
mkdir(targetPath);
6 回复
好的,根据你提供的标题和部分内容,我将详细解释如何使用 Node.js 实现一个简单的递归函数来创建多级目录。以下是完整的示例代码,并附有详细的注释说明:
示例代码
var fs = require('fs');
var path = require('path');
// 定义目标路径
var targetPath = "C:\\Users\\××××\\Desktop\\ss\\oo\\fdfd\\palipala\\";
/**
* 递归创建目录
* @param {string} dir - 目标目录路径
*/
function mkdir(dir) {
// 获取当前目录的父目录路径
var dirname = path.dirname(dir);
// 如果父目录不存在,则递归调用 mkdir 创建父目录
if (!fs.existsSync(dirname)) {
mkdir(dirname);
}
// 创建目标目录
return fs.mkdirSync(dir, 0o755);
}
// 调用函数创建目录
mkdir(targetPath);
代码解释
-
引入必要的模块:
var fs = require('fs'); var path = require('path');
fs
模块用于文件系统操作。path
模块用于处理和转换文件路径。
-
定义目标路径:
var targetPath = "C:\\Users\\××××\\Desktop\\ss\\oo\\fdfd\\palipala\\";
- 这里定义了一个需要创建的多级目录路径。
-
定义递归创建目录的函数
mkdir
:function mkdir(dir) { var dirname = path.dirname(dir); if (!fs.existsSync(dirname)) { mkdir(dirname); } return fs.mkdirSync(dir, 0o755); }
dirname = path.dirname(dir)
:获取当前目录的父目录路径。if (!fs.existsSync(dirname))
:检查父目录是否存在,如果不存在则递归调用mkdir
创建父目录。return fs.mkdirSync(dir, 0o755)
:创建目标目录,权限设置为0o755
(即 755 权限)。
-
调用函数创建目录:
mkdir(targetPath);
- 调用
mkdir
函数并传入目标路径,开始递归创建目录。
- 调用
总结
这段代码展示了如何使用 Node.js 的 fs
和 path
模块实现一个简单的递归函数来创建多级目录。通过递归的方式,可以确保所有父目录都存在后才创建子目录。这样可以避免因为父目录不存在而导致创建失败的情况。
var fs = require('fs'),
path = require('path')
;
var targetPath = "C:\\Users\\××××××\\Desktop\\ss\\oo\\sss\\dsdas\\"
;
function mkdir(dir){
var dirname = path.dirname(dir),
stat
;
if(!fs.existsSync(dirname)){
console.log(dirname);
mkdir(dirname);
}
if(!fs.existsSync(dir)){
fs.mkdirSync(dir,0755);
}
else{
return;
}
}
mkdir(targetPath);
+1
您提供的代码使用了递归来创建目录,并且会检查每个父目录是否存在。然而,该代码存在一些问题,比如在某些情况下可能会陷入无限递归(例如,当路径中包含不存在的根目录时)。为了解决这些问题,我们可以改进代码逻辑。
下面是一个更健壮的方法,使用递归和fs.mkdir
或fs.mkdirSync
来创建目录:
const fs = require('fs');
const path = require('path');
const targetPath = "C:\\Users\\××××\\Desktop\\ss\\oo\\fdfd\\palipala\\";
function createDirRecursive(dir) {
const dirPath = path.resolve(dir);
// 检查是否已存在该目录
if (fs.existsSync(dirPath)) return;
// 获取父目录路径
const parentDir = path.dirname(dirPath);
// 如果父目录不存在,则递归创建父目录
if (!fs.existsSync(parentDir)) {
createDirRecursive(parentDir);
}
// 创建当前目录
fs.mkdirSync(dirPath, { recursive: true, mode: 0o755 });
}
createDirRecursive(targetPath);
解释
- 使用
path.resolve
确保传入的路径是绝对路径。 - 检查目标目录是否已经存在,如果存在则直接返回。
- 使用
path.dirname
获取父目录路径。 - 如果父目录不存在,则递归地调用
createDirRecursive
函数。 - 最后,使用
fs.mkdirSync
创建当前目录,通过设置{ recursive: true }
来处理递归创建父目录的情况。
这种方法更加健壮,能够正确处理各种情况下的目录创建任务。