2016-11-14 48 views
1

我正在玩Node.js fs.writeFile()标志为我的问题找到正确的文件:我想替换文件的内容但抛出错误如果文件不存在。用Node.js替换文件内容而不创建一个新文件

我第一次尝试用r+但我有问题,如果新的内容比旧的更短:

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

拆除标志解决问题(给22),但创建,如果test没有按新的文件不存在。

这是可以用标志或我需要检测文件存在之前(不是很好找到)?

回答

2

你不能在一个步骤中做到这一点:打开文件写入将创建文件,如果它不存在,而打开文件与r+模式提出你提到的问题。

我看到两个选项:使用fs.stat(),然后在wfs.writeFile()模式

  1. 测试文件是否存在。
  2. 打开文件在r+模式,写入它,然后fs.ftruncate()文件到所需的大小。

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

+0

我总是被告知在测试文件之前是反模式,因为它不会保证文件状态,当你写。我可能有并发访问这个文件,所以不是第二好?谢谢 – NorTicUs

+0

因为我想重写这个文件,我发现最好的方法确实是删除它,注意错误(如果它不存在),然后用默认标志写入它。谢谢 – NorTicUs

相关问题