如果文件不存在,则创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或缓冲区。
节点文件系统文档 。