node.js-在创建临时文件之前检查文件是否存在

node.js-在创建临时文件之前检查文件是否存在,node.js,file,deprecated,file-exists,temp,Node.js,File,Deprecated,File Exists,Temp,我想在node.js中创建一个临时文件/目录。为此,我尝试了一个简单的算法: 根据pid、时间和随机字符生成文件名 检查文件是否存在 如果是:返回步骤1并重复 如果不是:创建文件并返回它 问题是:fs.exists的node.js文档明确指出不应该使用fs.exists,而应该只使用fs.open并捕获潜在错误: 在我的例子中,如果文件存在,我对打开它不感兴趣,我严格地试图找到一个不存在的文件名。有没有一种方法不使用fs.exists?或者,如果我确实使用了fs.exists,我是否应该担

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

  • 根据pid、时间和随机字符生成文件名
  • 检查文件是否存在
    • 如果是:返回步骤1并重复
    • 如果不是:创建文件并返回它
  • 问题是:
    fs.exists
    的node.js文档明确指出不应该使用
    fs.exists
    ,而应该只使用
    fs.open
    并捕获潜在错误:

    在我的例子中,如果文件存在,我对打开它不感兴趣,我严格地试图找到一个不存在的文件名。有没有一种方法不使用fs.exists?或者,如果我确实使用了
    fs.exists
    ,我是否应该担心该方法将来会被弃用?

    请使用
    'wx'
    标志,这样,如果文件不存在,您将创建该文件,如果文件已经存在,则返回一个错误


    通过这种方式,您消除了在
    fs.exists
    检查和
    fs.open
    调用之间创建文件的可能性(尽管很小)。

    使用这样的文件名格式,我怀疑您会遇到重复文件名的问题。我还建议您在名称中添加一个后缀,如“\u 2”而不是返回到步骤1@micnic很好的一点是,这将防止(很小的)多次随机生成相同的文件名。还值得对算法进行一些修改,以限制尝试的最大次数:)不过,为了解决这个问题,上面的算法已经足够了,这太棒了!但是有一个问题,我如何判断fs.open中的错误是因为文件已经存在,而不是其他IO错误(打开的文件太多等…?@user2221343,我猜,从错误消息来看,您可以区分发生了哪些错误occured@user2221343获取的错误对象将包含区分特定错误所需的详细信息。创建一个小测试,看看你在这种情况下得到了什么;这可能是一个EEXIST错误。刚刚测试过这个;如果您是正确的,可以在此处检查
    if(err.code===“EEXIST”)
    以确定该文件已经存在。fs.mkdir也可以这样做(用于创建临时目录)