Node.js / 删除文件中的内容

71

我想使用node.js删除一个简单文本文件的内容。或者用新的/空的文件替换该文件。

我如何在node中实现这个操作?


3
你看过这里吗?http://nodejs.org/api/fs.html - Dan455
4
因为缺乏研究而被负评。 - Peter Lyons
1
如果没有提供标志,fs.writeFile的默认行为不是这样吗?实际上,向文件追加内容更难... - MobA11y
1
@ectomorph:从fs.writeFile的文档中可以看到,它会异步地将数据写入文件,如果文件已经存在,则会替换该文件。对我来说似乎很简单。我想念那些可以随意添加LMGTFY链接的日子... http://nodejs.org/api/fs.html#fs_fs_writefile_filename_data_options_callback - MobA11y
2
@ChrisCM:我一开始只是在寻找替换内容,所以没有看到这个。很抱歉,下次我会更加准确。但是,在SO上发布问题通常会给你一些额外的信息。比如今天我学会了LMGTFY是什么意思。非常感谢... - user937284
显示剩余2条评论
2个回答

140
你正在寻找 fs.truncate 或者 fs.writeFile。以下两种方法都可以使用:
const fs = require('fs')
fs.truncate('/path/to/file', 0, function(){console.log('done')})

或者

const fs = require('fs')
fs.writeFile('/path/to/file', '', function(){console.log('done')})

还有同步版本两个函数,在某些情况下会非常有用。


2
你能详细说明为什么同步版本不可取吗? - user393219
1
当然!主要原因是 Node 是单线程的(大部分情况下),因此如果您进行昂贵的同步操作,将会阻塞整个进程的执行。 - Andbdrew
1
不确定为什么,但是这两个似乎都不能将文件清零。 - chovy
截至2020年2月10日,此答案中的第一个示例可以缩短为const fs = require('fs');,然后使用fs.truncate(filePath, () => { });。由于现在可用,我建议使用const而不是var,特别是如果您正在处理较大的代码库,以避免不必要的副作用。 - Manfred
4
使用truncatetruncateSync以及writeFilewriteFileSync有其独特而有效的理由。我不同意它们不应该被使用的观点。在不同的情况下应该选择正确的工具。 - blong
1
@blong 是的,我同意两者都有其存在的意义(虽然晚了十年):) 我会进行编辑。 - Andbdrew

2

fs.unlink是删除文件所需的调用。要使用不同内容替换它,只需使用fs.writeFile覆盖即可。


2
从Node文档中的fs.writeFile函数中:异步地将数据写入一个文件,如果该文件已经存在,则替换该文件。您的unlink步骤是不必要的。 - MobA11y
1
@ChrisCM 我只是回答问题的两个部分。 - Peter Lyons

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接