【问题标题】:Node JS - No such file?Node JS - 没有这样的文件?
【发布时间】:2016-10-11 18:25:53
【问题描述】:

我正在使用这段代码按需删除文件

{
...
    fs.access(path, (err)=> err || fs.unlink(path));    
...
}

我收到了这个错误

错误:ENOENT:没有这样的文件或目录,取消链接 'C:\ ...' 在错误(本机)

这对我来说毫无意义,因为我实际上只是在尝试取消链接之前检查了文件是否存在 - 我感觉在幕后发生了一些奇怪的事情,例如文件锁定。

如何纠正这个错误?

另外,在我尝试删除之前,我是否需要自己锁定文件,以保证删除的健壮和安全。每次用户尝试删除他们的文件时,我都不会在那里手动删除文件并重新启动服务器。

【问题讨论】:

  • “我实际上只是在尝试取消链接之前检查了文件是否存在” - 不要那样做,这是不好的做法。不要进行文件存在性检查(出于某种原因,它们已被弃用)。只需取消链接并捕获错误(如果有)。
  • 我应该递归地取消链接直到它工作
  • 不会发生错误,我很困惑
  • 在您进行“存在”检查和调用 unlink 之间的瞬间,由于外部因素,文件可能已经消失。与您的应用程序是否可能无关,它在技术上仍然是可能的。因此,“存在”支票通常毫无价值。简单地做你想做的事情(读取、写入、删除)并在错误发生时处理它们是文件系统交互的唯一有用策略。
  • 我应该一直尝试删除直到它删除

标签: node.js file error-handling filestream chmod


【解决方案1】:

不建议在写入或删除之前调用 fs.access。请检查以下链接 https://nodejs.org/api/fs.html#fs_fs_access_path_mode_callback

Using fs.access() to check for the accessibility of a file before calling fs.open(), fs.readFile() or fs.writeFile() is not recommended. Doing so introduces a race condition, since other processes may change the file's state between the two calls. Instead, user code should open/read/write the file directly and handle the error raised if the file is not accessible.

【讨论】:

    猜你喜欢
    • 2019-06-29
    • 1970-01-01
    • 1970-01-01
    • 2021-08-14
    • 1970-01-01
    • 1970-01-01
    • 2018-12-27
    • 2013-08-03
    • 1970-01-01
    相关资源
    最近更新 更多