替换文件内容,而不使用Node.js创建新文件

替换文件内容,而不使用Node.js创建新文件,node.js,Node.js,我正在使用Node.jsfs.writeFile()标志为我的问题找到正确的文件:我想替换文件的内容,但如果文件不存在,就会抛出错误 我的第一次尝试是使用r+,但如果新内容比旧内容短,我会遇到问题: fs.writeFileSync('test', '11111111111'); > 111111111111 fs.writeFileSync('test', '22', {flag: 'r+'}) > 221111111111 删除标志可以解决问题(给出22),但如果test不存在

我正在使用Node.js
fs.writeFile()
标志为我的问题找到正确的文件:我想替换文件的内容,但如果文件不存在,就会抛出错误

我的第一次尝试是使用
r+
,但如果新内容比旧内容短,我会遇到问题:

fs.writeFileSync('test', '11111111111');
> 111111111111
fs.writeFileSync('test', '22', {flag: 'r+'})
> 221111111111
删除标志可以解决问题(给出
22
),但如果
test
不存在,则创建一个新文件


使用标志是否可行,或者我是否需要在之前检测文件是否存在(不太常见)?

您不能一步完成此操作:如果文件不存在,打开文件进行写入将创建文件,而使用
r+
模式打开文件会出现您提到的问题

我看到两种选择:

  • 使用
    fs.stat()
    测试是否存在,然后在
    w
    模式下使用
    fs.writeFile()
  • r+
    模式打开文件,对其进行写入,然后
    fs.ftruncate()
    将文件设置为所需大小

  • 我推荐第一种方法。代码将更易于阅读和推理。

    以前我一直被告知测试文件是一种反模式,因为它不能保证您在编写时的文件状态。我可以同时访问这个文件,所以第二个不是更好吗?谢谢,因为我想覆盖这个文件,我发现最好的方法就是删除它,注意错误(如果它不存在),然后用默认标志写入它。非常感谢。