【问题标题】:Replace file content without creating a new file with Node.js使用 Node.js 替换文件内容而不创建新文件
【发布时间】:2016-11-15 01:58:42
【问题描述】:

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

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

fs.writeFileSync('test', '11111111111');
> 111111111111
fs.writeFileSync('test', '22', {flag: 'r+'})
> 221111111111

删除标志可以解决问题(给22),但如果test 不存在则创建一个新文件。

是否可以使用标志或者我需要在之前检测文件是否存在(不是很发现)?

【问题讨论】:

    标签: node.js


    【解决方案1】:

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

    我看到两个选项:

    1. 使用fs.stat() 测试是否存在,然后在w 模式下使用fs.writeFile()
    2. r+ 模式打开文件,写入文件,然后fs.ftruncate() 将文件调整为所需大小。

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

    【讨论】:

    • 我总是被告知之前测试文件是一种反模式,因为它不能保证你写的时候文件的状态。我可能对这个文件有并发访问权限,所以第二个不是更好吗?谢谢
    • 由于我想覆盖文件,我发现最好的方法确实是删除它,注意错误(如果它不存在),然后用默认标志写入它。谢谢
    猜你喜欢
    • 1970-01-01
    • 2019-12-31
    • 1970-01-01
    • 1970-01-01
    • 2018-10-09
    • 2015-12-23
    • 2017-05-25
    • 2012-01-25
    • 1970-01-01
    相关资源
    最近更新 更多