求解fs.existSync方法不准确,怎么办?
今天在写个上传的时候遇到了的问题,用了formidable中间件,这个东西不像multer那样可以自动创建文件夹,所以就想自己写个方法判断一下文件夹是否存在,不存在的话就创建一个。
问题就此出现,先上运行截图:
截图中可以看到fs.existSync将不存在的目录路径返回了true,期间也尝试了一下用其他方法(比如fs.accessSync,不存在的路径不会抛异常)都不行。。我开始怀疑人生了,是不是我哪里写错了?现在比较懵逼看不出来。。。下面是我的代码:
function mkdirsSync(dirpath) {
if (!fs.existsSync(dirpath)) {
let pathtmp = '';
dirpath.split(path.sep).forEach(function(dirname) {
pathtmp = pathtmp ? path.join(pathtmp, dirname) : dirname;
if(!pathtmp) {
return;
}
console.log(pathtmp);
if(!fs.existsSync(pathtmp)) {
try {
fs.mkdirSync(pathtmp);
} catch (err) {
console.log(err);
}
} else {
console.log('Exist path %s', pathtmp);
}
});
}
return true;
}
mkdirsSync('Users/nuxio/workspace/express-blog-api/server/public/upload/blog_imgs');
SOS~~~~~~
7 回复
这是这么用的: 感觉没毛病
@blackmatch 可能是这个方法在linux下的bug吧。。。我在windows上运行都没问题,在mac上有问题。。提交到travis-ci上运行测试也不通过,╮(╯▽╰)╭
@i5ting 艾特一下大佬,求助这种情况应该怎么办
@Ang-Work
mkdirsSync(‘Users/nuxio/workspace/express-blog-api/server/public/upload/blog_imgs’);
这行的路径最前面加一个/
试试
@Ang-Work 我是在Mac上运行的
@Fov6363 你指出了关键。。。感谢_(:зゝ∠)_
直接创建文件或文件夹,然后捕获错误来处理