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);

代码解释

  1. 引入必要的模块

    var fs = require('fs');
    var path = require('path');
    
    • fs 模块用于文件系统操作。
    • path 模块用于处理和转换文件路径。
  2. 定义目标路径

    var targetPath = "C:\\Users\\××××\\Desktop\\ss\\oo\\fdfd\\palipala\\";
    
    • 这里定义了一个需要创建的多级目录路径。
  3. 定义递归创建目录的函数 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 权限)。
  4. 调用函数创建目录

    mkdir(targetPath);
    
    • 调用 mkdir 函数并传入目标路径,开始递归创建目录。

总结

这段代码展示了如何使用 Node.js 的 fspath 模块实现一个简单的递归函数来创建多级目录。通过递归的方式,可以确保所有父目录都存在后才创建子目录。这样可以避免因为父目录不存在而导致创建失败的情况。


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);
var fs = require('fs');
var path = require('path');
var targetPath = "/xxxx";
function mkdirs(dir) {
    if(!fs.existsSync(dir)) {
        mkdirs(path.dirname(dir));
        fs.mkdirSync(dir);
    }
}

已有一个比较多人用的模块,就是实现这个功能的: mkdirp https://github.com/substack/node-mkdirp

您提供的代码使用了递归来创建目录,并且会检查每个父目录是否存在。然而,该代码存在一些问题,比如在某些情况下可能会陷入无限递归(例如,当路径中包含不存在的根目录时)。为了解决这些问题,我们可以改进代码逻辑。

下面是一个更健壮的方法,使用递归和fs.mkdirfs.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);

解释

  1. 使用 path.resolve 确保传入的路径是绝对路径。
  2. 检查目标目录是否已经存在,如果存在则直接返回。
  3. 使用 path.dirname 获取父目录路径。
  4. 如果父目录不存在,则递归地调用 createDirRecursive 函数。
  5. 最后,使用 fs.mkdirSync 创建当前目录,通过设置 { recursive: true } 来处理递归创建父目录的情况。

这种方法更加健壮,能够正确处理各种情况下的目录创建任务。

回到顶部