【问题标题】:node js - fs file exists - getting a little confusednode js - fs文件存在 - 有点困惑
【发布时间】:2014-03-15 22:16:30
【问题描述】:

我对似乎节点 fs() 的各种检查文件是否存在的方法有点困惑。

我可以:(http://nodejs.org/api/fs.html#fs_fs_readfile_filename_options_callback)

fs.readFile('somefile.html', function (err, data) {
  if (err)  { /* it doesn't */  }
  else { /* it does */ }
});

但是在错误的情况下运行条件感觉很奇怪(预计文件有时不会存在)

然后是 fs.exists() (http://nodejs.org/api/fs.html#fs_fs_exists_path_callback)

fs.exists('somefile.html', function (exists) {
  if(exists) { /* it does */ }
  else {  /* it doesn't */ }
});

这感觉更合乎逻辑,但后来我读到了这个:

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

我明白,所以在我选择“错误方式”之前 -

检查文件是否存在的常用方法是什么(如果是,打开它)/(也许最快的答案也是如此) - 使用节点 fs() ?

我的程序中的逻辑很简单 -

if (file does not exist) { continue the tasks to create it; } 
else { read it and respond with it; }

非常感谢

【问题讨论】:

    标签: javascript node.js


    【解决方案1】:

    你可以使用 readFileSync 来做你想做的事情

    var file = fs.readFileSync('somefile.html');
    if (file) { do stuff }
    else { error }
    

    这个故事的寓意是你不需要做存在。这纯粹是检查文件是否存在。如果无法打开它,您可以运行 readFile ,它会出错。如果可以,它将返回数据。

    【讨论】:

    • 嗯,哥们。 - 我更喜欢这种方法的异步版本 - 应该以同样的方式工作吗?
    • 在 fs.open 和 fs.readfile 之间 - 你会选择 fs.readfile (异步或同步),为什么?抱歉打扰..
    • 您可以在stackoverflow.com/questions/13858909/… 阅读有关同步与异步的更多信息,它们的工作原理完全相同,除了回调/函数/值获取的运行/设置方式。
    • 这个故事的寓意是你不需要做存在。这纯粹是检查文件是否存在。你可以直接运行readFile,如果打不开,会报错。如果可以,它将返回数据。
    • 是的,伙计,这就是我在旅行中发现的——你介意在你的答案中加入那条评论吗?我会接受的。谢谢。
    猜你喜欢
    • 2016-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-21
    • 2019-12-12
    • 1970-01-01
    • 1970-01-01
    • 2020-12-11
    相关资源
    最近更新 更多