上一篇
眼镜店:买镜架送镜片,我亏本大甩卖?
在使用Electron开发桌面小应用时,根据每个新生用户,分配一个指定的文件夹,缓存该用户临时文件,需要一个动态生成文件夹功能。
Nodejs 生成文件夹,需要使用 fs 模块的exists 函数和mkdir函数, exists 函数判断文件夹是否存在,mkdir 函数直接生成文件夹。
JS var createUserFolder = function (path) {
var fs = require("fs"); // 引入fs模块
fs.exists(path, function(exists) { //判断文件夹是否存在
if(exists) {
console.log('文件夹已经存在');
return false;
}
fs.mkdir(path,function(err) { //生成文件夹
if(err){
console.log('生成文件夹失败:'+err);
return false;
}
console.log('生成文件夹成功');
})
});
}
createUserFolder('./archer'); //根目录生成archer的文件夹
在根目录下生成每个用户文件夹,文件夹结构明显不合理,于是将它们统一存放在 user 文件夹下。调用 createUserFolder('./user/archer')发现无法正常生成文件夹,原来 mkdir 函数只能一层一层的生成文件夹,先有user文件夹,后有archer文件夹。
JScreateUserFolder('./user');
createUserFolder('./user/archer');
如果文件夹路径层次足够深,岂不要调用N次createUserFolder函数? 想想画面不要太美丽。
分析文件夹的路径组成部分,决定以 ‘/’ 为分层做断点,逐层拼接文件夹路径,先生成文件夹上一层的文件夹,直到没有找到‘/’分隔符。
JS var mkdirs = function(str,index) {
var fs = require("fs"); // 引入fs模块
var data = str.split('/');
var len = base.getDataLength(data) - 1;
var index = index || 1; //index默认1,指的是根目录,根目录已存在
if(index > len) {
return false;
}
var path = '';
var regular = /(/*$)/g;
for(var i= 0; i <= index; i++) {
path += data[i]+'/';
}
if(!base.isEmptyValue(path)) {
path = path.replace(regular,"");
}
fs.exists(path, function(exists) { //判断文件夹是否存在
if(exists) {
mkdirs(str,index+1);
return false;
}
fs.mkdir(path,function(err) { //生成文件夹
if(err){
console.log('生成文件夹失败:'+err);
return false;
}
mkdirs(str,index+1); //寻找下一层的文件夹
})
});
}
mkdirs('./user/archer');
使用递归方式查找,只要明确给出个终点,程序可无限的自动寻找下去,一步到位。
最新评论Latest comments