Node.js fs模块写入文件时,添加'a'标志仍覆盖数据的问题
Node.js 使用
fs.writeFileSync追加数据却覆盖的问题解决 你的问题出在fs.writeFileSync的参数顺序错误,导致你设置的'a'标志根本没生效。
Node.js的fs.writeFileSync方法签名是:
fs.writeFileSync(path, data[, options])
第三个参数是可选的配置对象(options),而你把编码字符串"UTF-8"放在了第三个参数的位置,第四个参数的{'flags':'a'}被忽略了——Node.js只会读取前三个参数,此时第三个参数被当作options处理,但字符串不是合法的配置对象,所以会 fallback 到默认的'w'写入模式(覆盖模式),自然就把原有内容覆盖了。
修正后的两种写法:
- 推荐:把编码和标志都放进options对象
var fs = require("fs"); // 将编码和flags都作为options的属性传入 fs.writeFileSync("sample.txt", 'Y', { encoding: "UTF-8", flag: 'a' }); fs.readFile("sample.txt", (err, data) => { if(err){ return console.error(err); } console.log("Data read : ", data.toString()) });
- 调整参数顺序(不推荐,可读性差)
var fs = require("fs"); // 第三个参数直接传flags配置对象,编码作为options里的属性 fs.writeFileSync("sample.txt", 'Y', { flag: 'a' }, "UTF-8");
运行修正后的代码,就能正常向文件追加内容而不覆盖原有数据了。
内容的提问来源于stack exchange,提问作者Ayush
相关产品推荐
相关产品推荐

