如果文件不存在,则创build一个文件

我想创build一个文件foobar 。 但是,如果用户已经有一个名为foobar的文件,那么我不想覆盖它们。 所以我只想创buildfoobar如果它不存在。

起初,我认为我应该这样做:

 fs.exists(filename, function(exists) { if(exists) { // Create file } else { console.log("Refusing to overwrite existing", filename); } }); 

但是,看fs.exists的官方文档 ,它写道:

fs.exists()是一个时代错误,只存在于历史原因。 几乎从来没有理由在你自己的代码中使用它。

特别是,在打开文件之前检查文件是否存在是一种反模式,使您容易受到竞争状况的影响:另一个进程可能会在调用fs.exists()和fs.open()之间删除文件。 只要打开文件,并处理不存在的错误。

fs.exists()将被弃用。

显然,节点开发人员认为我的方法是一个坏主意。 另外,我不想使用将被弃用的函数。

我怎样才能创build一个文件,而不写一个现有的?

我想答案是:

只要打开文件,并处理不存在的错误。

尝试像这样:

 function createFile(filename) { fs.open(filename,'r',function(err, fd){ if (err) { fs.writeFile(filename, '', function(err) { if(err) { console.log(err); } console.log("The file was saved!"); }); } else { console.log("The file exists!"); } }); } 
 fs.closeSync(fs.openSync('/var/log/my.log', 'a')) 

如果你想稍后将数据写入这个文件,你可以使用fs.appendFile('message.txt', 'data to append', 'utf8', callback);

将数据asynchronous追加到文件, 如果该文件不存在 ,则创build该文件 。 数据可以是string或缓冲区。

节点文件系统文档 。