如何不覆盖node.js中的文件

我想让这个代码改变文件名,如果文件存在,而不是覆盖它。

var fileName = 'file'; fs.writeFile(fileName + '.txt', 'Random text', function (err) { if (err) throw err; console.log('It\'s saved!'); }); 

就像是:

 var fileName = 'file', checkFileName = fileName, i = 0; while(fileExists(checkFileName + '.txt')) { i++; checkFileName = fileName + '-' + i; } // file-1, file-2, file-3... fileName = checkFileName; fs.writeFile(fileName + '.txt', 'Random text', function (err) { if (err) throw err; console.log('It\'s saved!'); }); 

考虑到fs.exists()现在已被弃用,如果文件不存在, fs.statSync()fs.accessSync()会抛出错误,我怎么才能使“fileExists”函数成为可能。 也许有更好的方法来实现这一目标?

使用writeFile将第三个参数设置为{flag: "wx"} (有关标志的概述,请参阅fs.open )。 这样,当文件已经存在时,它就会失败,并且也避免了在existswriteFile调用之间创build文件的可能竞争条件。

当文件已经存在时,以不同的名字写入文件的代码示例。

 fs = require('fs'); var filename = "test"; function writeFile() { fs.writeFile(filename, "some data", { flag: "wx" }, function(err) { if (err) { console.log("file " + filename + " already exists, testing next"); filename = filename + "0"; writeFile(); } else { console.log("Succesfully written " + filename); } }); } writeFile();