如果文件不存在,则创建一个文件

Posted

技术标签:

【中文标题】如果文件不存在,则创建一个文件【英文标题】:Create a file if it doesn't already exist 【发布时间】:2015-09-20 14:55:02 【问题描述】:

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

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

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

但是,查看official documentation 对应的fs.exists,它显示为:

fs.exists() 是不合时宜的,仅出于历史原因而存在。 几乎不应该有理由在您自己的代码中使用它。

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

fs.exists() 将被弃用。

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

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

【问题讨论】:

它告诉你:打开文件并处理错误(或缺少错误) 【参考方案1】:
import  promises as fs  from "fs";

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

【讨论】:

请不要只发布代码作为答案,还要解释您的代码的作用以及它如何解决问题的问题。带有解释的答案通常更有帮助、质量更好,并且更有可能吸引投票。 噢,来吧大家,没有必要对新手发布一个实际上与问题相关且有帮助的代码 sn-p 感到沮丧。是的,解释会改善这个答案,但说根本不发布答案?必须有更好的方式来欢迎@pushkine 访问该网站。【参考方案2】:
fs.closeSync(fs.openSync('/var/log/my.log', 'a'))

【讨论】:

【参考方案3】:

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

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

Node file system documentation.

【讨论】:

【参考方案4】:

我认为答案是:

只需打开文件并在错误不存在时处理它。

尝试类似:

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

【讨论】:

以上是关于如果文件不存在,则创建一个文件的主要内容,如果未能解决你的问题,请参考以下文章

检查文件夹,如果不存在则创建它

如果文件不存在则创建文件,然后将日志写入其中

如果文件不存在则创建文件

如果目录不存在,则创建一个目录,然后在该目录中创建文件

如果不存在,则创建一个 .txt 文件,如果它确实追加一个新行

php如果不存在则创建一个文件