在 node.js 中使用 fs 覆盖文件的最佳方法是啥

Posted

技术标签:

【中文标题】在 node.js 中使用 fs 覆盖文件的最佳方法是啥【英文标题】:What's the best way to overwrite a file using fs in node.js在 node.js 中使用 fs 覆盖文件的最佳方法是什么 【发布时间】:2017-10-09 02:27:46 【问题描述】:

我正在尝试覆盖现有文件。 我首先使用以下方法检查文件是否存在:

fs.existsSync(path)

如果文件没有退出我正在创建和写入使用:

fs.writeFileSync(path,string) 

问题是当文件已经存在并且我想覆盖它的所有内容时。 是否有单行解决方案,到目前为止我搜索并找到了使用的解决方案 fs.truncate & fs.write,但有没有一击解决方案?

【问题讨论】:

writeFileSync默认不覆盖文件吗? 【参考方案1】:

fs.writeFileSyncfs.writeFile 默认覆盖文件,如果这是你想做的,不需要额外的检查。文档中提到了这一点:

fs.writeFile

将数据异步写入文件,如果文件已存在则替换该文件。

【讨论】:

当文件已存在时,我收到“文件已存在”错误。这是问题的主要部分,但无论如何都是 tnx。 我遇到了我编辑package.json 的情况,但由于某种原因它不起作用。 ,也许文件被锁定,我怎样才能确保它可以工作?【参考方案2】:

找到了解决办法。 fs.writeFileSync 为可以是对象的选项获取第三个参数。 所以如果你得到“文件已经存在”,你应该这样做。

fs.writeFileSync(path,content,encoding:'utf8',flag:'w')

【讨论】:

从我在docs 中看到的那个标志是默认的..也许你用不同的标志使用它【参考方案3】:

当您说“最佳方式”时,我认为是性能和可扩展性,我会说使用 asynchronous method

fs.writeFileSync(path,string) 顾名思义是同步的(阻塞 api)线程在请求​​的整个生命周期中都被保留,这意味着您的 nodejs 线程将被阻塞,直到操作完成并且此行为在同时连接的生产环境中来自多个客户端可能会杀死您的应用。

不要只考虑一行代码,更少的代码并不意味着更好的性能。

【讨论】:

主要问题是当我在一个已经存在的文件上使用 fs.writeFileSync 时,我得到一个“文件已经存在”。 当然,“最好的”总是取决于环境、情况和观点。然而,异步显然是使用 javascript 的“最佳”方式。我现在正在构建一个占用空间小的“NodeJS 框架”,当我调用 index.js 来启动我的服务器时,一切都是同步的,所以我可以使用 try 和 catch 块,一旦服务器运行一切('http 请求主要是异步处理的)用于非阻塞。

以上是关于在 node.js 中使用 fs 覆盖文件的最佳方法是啥的主要内容,如果未能解决你的问题,请参考以下文章

Node.js:使用“fs”迭代目录时检查文件是不是为符号链接

Node.js 中 fs.renameSync 报错

Node.js fs文件系统相关操作

Node.js fs文件系统相关操作

node js fs模块

Node.js中的fs 模块