【问题标题】:node.js - check if file exists before creating temp filenode.js - 在创建临时文件之前检查文件是否存在
【发布时间】:2015-02-16 03:29:41
【问题描述】:

我想在 node.js 中创建一个临时文件/目录。为此,我正在尝试一个简单的算法:

  1. 根据 pid、时间和随机字符生成文件名
  2. 检查文件是否存在
    • 如果是:返回步骤 1 并重复
    • 如果不是:创建文件并返回

这就是问题所在:fs.exists 的 node.js 文档 明确 声明不应使用 fs.exists,而应该只使用 fs.open 并捕获潜在错误: http://nodejs.org/docs/latest/api/fs.html#fs_fs_exists_path_callback

在我的情况下,如果文件存在,我对打开文件不感兴趣,我严格地试图找到一个 尚不存在 的文件名。有没有办法不使用fs.exists?或者,如果我使用fs.exists,我是否应该担心这种方法将来会被弃用?

【问题讨论】:

  • 使用这样的文件名格式,我怀疑你会遇到文件名重复的问题。
  • 我还建议您为文件的名称添加一个后缀,例如“_2”,而不是返回步骤 1
  • @micnic 好点,这将防止多次随机生成相同文件名的(小)机会。还值得稍微修改一下算法以限制最大尝试次数:) 为了这个问题,上述算法就足够了

标签: node.js file deprecated file-exists temp


【解决方案1】:

fs.open'wx' 标志一起使用,以便在文件不存在时创建文件,如果文件已存在则返回错误。

这样您就消除了在fs.exists 检查和fs.open 调用以创建文件之间创建文件的可能性(尽管很短)。

【讨论】:

  • 太棒了!但是有一个问题,我如何判断 fs.open 的错误是因为文件已经存在,而不是其他一些 IO 错误(打开的文件太多等)?
  • @user2221343,从报错的信息中,我猜,你可以区分是哪个错误发生了
  • @user2221343 您获得的错误对象将包含区分特定错误所需的详细信息。创建一个小测试,看看在这种情况下你会得到什么;这可能是 EEXIST 错误。
  • 刚刚测试过这个;你是对的,可以在这里检查if (err.code === 'EEXIST') 以确定该文件已经存在。 fs.mkdir 也是如此(用于创建临时目录)
猜你喜欢
  • 2013-07-22
  • 1970-01-01
  • 1970-01-01
  • 2015-11-22
  • 1970-01-01
  • 2014-06-10
  • 2013-07-15
  • 2019-03-07
  • 2010-10-14
相关资源
最近更新 更多