【问题标题】:is ruby rm_rf asynchronous?ruby rm_rf 是异步的吗?
【发布时间】:2012-01-19 05:06:27
【问题描述】:

如果我这样做

rm_rf('somewhere')
mkdir('somewhere')

mkdir 每隔一段时间就会抛出一个Permission Denined。这是因为rm_rf 异步运行,有时在mkdir 运行之前还没有完成删除目录?

如何让它在完成删除之前阻塞?

顺便说一句,在 Windows 上运行。

谢谢

【问题讨论】:

    标签: ruby io


    【解决方案1】:

    我也遇到了这个错误,并首先将其重命名为解决方法:

      build_dir.directory? &&
        build_dir.rename(old_build_dir) &&
        FileUtils.rm_rf(old_build_dir)
      build_dir.mkdir
    

    build_dirold_build_dirPathname 对象)

    不完美,但比随机的sleep 更好。

    【讨论】:

      【解决方案2】:

      听起来像是 NTFS 的一个功能,见Microsoft Suppport

      此文件处于待删除状态。该文件已 已删除,但仍有打开的句柄。 NTFS 将等到 在更新索引之前,此文件的所有句柄都已关闭。如果 尝试访问该文件,但是,NTFS 将拒绝 试图。因为该文件在索引中列出,但实际上是 已删除,您可以看到该文件,但无法访问它。

      看看解决方案,我认为除了等待和重试之外没有什么可做的。

      【讨论】:

        【解决方案3】:

        rm_rf同步的,与任何其他常用的 ruby​​ 方法一样。

        如果不是,那么您可能会收到 Errno::EEXIST 错误,但您会收到“权限被拒绝”。

        作为一种解决方法,尝试在rm_rfmkdir 之间插入小延迟,例如sleep(0.1)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-02-27
          • 2017-02-19
          • 2015-08-03
          • 2019-01-05
          • 2021-03-30
          相关资源
          最近更新 更多