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

How to not overwrite file in 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 调用之间创建文件的可能竞争条件。

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

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();