gpt4 book ai didi

javascript - Node.js 创建文件夹或使用现有的

转载 作者:IT老高 更新时间:2023-10-28 13:16:23 24 4
gpt4 key购买 nike

我已经阅读过 Node.js 的文档,除非我遗漏了什么,否则它不会说明某些操作中的参数包含什么,尤其是 fs.mkdir() .正如您在文档中看到的那样,它不是很多。

目前,我有这段代码,它尝试创建一个文件夹或使用现有文件夹:

fs.mkdir(path,function(e){
if(!e || (e && e.code === 'EEXIST')){
//do something with contents
} else {
//debug
console.log(e);
}
});

但我想知道这是正确的方法吗?检查代码 EEXIST 是知道文件夹已经存在的正确方法吗?我知道我可以在创建目录之前执行 fs.stat(),但这已经是对文件系统的两次点击。

其次,是否有完整的或至少更详细的 Node.js 文档,其中包含有关错误对象包含的内容、参数的含义等详细信息。

最佳答案

编辑: 因为这个答案很受欢迎,我已经更新它以反射(reflect)最新的做法。

Node >=10

Node 的 fs 的新 { recursive: true } 选项现在 native 允许这样做。此选项模仿 UNIX 的 mkdir -p 的行为。它将递归地确保路径的每个部分都存在,并且如果其中任何部分存在,则不会抛出错误。

(注意:它可能仍然会抛出 EPERMEACCESS 等错误,所以最好还是将其包装在 try {} catch (e) {} 如果你的实现容易受到它的影响。)

同步版本。

fs.mkdirSync(dirpath, { recursive: true })

异步版本

await fs.promises.mkdir(dirpath, { recursive: true })

旧 Node 版本

使用 try {} catch (err) {},您可以非常优雅地实现这一点,而不会遇到竞争条件。

为了避免检查存在和创建目录之间的死时间,我们只是尝试直接创建它,如果是 EEXIST 则忽略错误(目录已存在)。

但是,如果错误不是 EEXIST,我们应该抛出错误,因为我们可能正在处理类似 EPERMEACCES

function ensureDirSync (dirpath) {
try {
return fs.mkdirSync(dirpath)
} catch (err) {
if (err.code !== 'EEXIST') throw err
}
}

对于 mkdir -p 类似的递归行为,例如./a/b/c,您必须在 dirpath 的每个部分都调用它,例如./a./a/b.a/b/c

关于javascript - Node.js 创建文件夹或使用现有的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13696148/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com