创建一个尚不存在的文件

时间:2015-07-02 22:02:34

标签: javascript node.js fs

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

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

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

但是,查看fs.exists的{​​{3}},其内容为:

  

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

     

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

     

fs.exists()将被弃用。

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

如何在不写现有文件的情况下创建文件?

4 个答案:

答案 0 :(得分:16)

我认为答案是:

  

只需打开文件并处理错误即可。

尝试类似:

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

答案 1 :(得分:5)

fs.closeSync(fs.openSync('/var/log/my.log', 'a'))

答案 2 :(得分:1)

import { promises as fs } from "fs";

fs.readFile(path).catch(() =>
    fs.writeFile(path, content);
);

答案 3 :(得分:0)

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

  

将数据异步附加到文件,创建文件(如果该文件尚不存在)。数据可以是字符串或缓冲区。

Node file system documentation