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

时间:2015-12-09 19:23:04

标签: javascript node.js fs

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

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!');
});

我如何制作" fileExists"函数,考虑到fs.exists()现已弃用,fs.statSync()fs.accessSync()如果文件不存在则抛出错误。也许有更好的方法来实现这个目标?

1 个答案:

答案 0 :(得分:13)

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