如果文件尚不存在,请创建该文件

Cor*_*ein 9 javascript fs node.js

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

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

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

然而,看着官方文档fs.exists,它读取:

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

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

fs.exists()将被弃用.

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

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

Dav*_*ari 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!");
    }
  });
}
Run Code Online (Sandbox Code Playgroud)


小智 6

import { promises as fs } from "fs";

fs.readFile(path).catch(() =>
    fs.writeFile(path, content)
);
Run Code Online (Sandbox Code Playgroud)

  • 请不要仅发布代码作为答案,还要提供解释您的代码的作用以及它如何解决问题的问题。带解释的答案通常更有帮助,质量也更好,并且更有可能吸引点赞。 (4认同)

cst*_*sik 5

fs.closeSync(fs.openSync('/var/log/my.log', 'a'))
Run Code Online (Sandbox Code Playgroud)