我正在尝试在每次按钮点击事件后创建一个目录。 这只适用于10个目录
5612cfea107f9e0f356b3dee_1 5612cfea107f9e0f356b3dee_2 5612cfea107f9e0f356b3dee_3 5612cfea107f9e0f356b3dee_n
然后我收到此错误:
Error: EEXIST: file already exists, mkdir 'user/public/uploadGallery/5612cfea107f9e0f356b3dee_10'
app.post('/createDirectories', function(req, res) {
var id = '5612cfea107f9e0f356b3dee';
var pathDirectory = __dirname + '/public/uploadGallery/' + id;
fs.readdir(__dirname + '/public/uploadGallery/', function (err, files) {
var countVal = files.filter(junk.not).length;
var fileVal = files.filter(junk.not);
if(countVal == '0'){
fs.mkdirSync(pathDirectory + '_' + 1);
console.log("Directory created: " + pathDirectory + '_' + 1);
}else{
var lastElem = fileVal[fileVal.length-1];
var lastElemSplitValue = lastElem.split("_")[1];
var valInt = parseInt(lastElemSplitValue, 10) +1;
fs.mkdirSync(pathDirectory + '_' + valInt);
}
});
});
我该怎么做才能解决这个问题?我想创建n个目录。
感谢您的帮助。 马丘比丘
答案 0 :(得分:2)
问题在于排序
你有目录
添加第10个 - 并且,在按字母顺序或词汇顺序中,您将
所以,最后一个文件夹是_9
... 9 + 1 = 10 ......已经存在!
您可以将代码更改为
} else {
var valInt = Math.max.apply(null, fileVal.map(function(entry) {
return parseInt(entry.split("_").pop(), 10);
})) + 1;
fs.mkdirSync(pathDirectory + '_' + valInt);
}
这将Math.max应用于将fileVal条目映射到由' _'
分割的每个fileVal条目的最后部分的parseInt的结果