gpt4 book ai didi

当存在指向目录 : alternatives? 的符号链接(symbolic link)时,Ruby FileUtils.rm_r 在 Windows 上失败

转载 作者:数据小太阳 更新时间:2023-10-29 08:08:22 25 4
gpt4 key购买 nike

我支持适用于 OS X 和 Linux 的跨平台 ruby​​ 2 脚本,但在尝试删除包含目录符号链接(symbolic link)的树时在 Windows 上失败。这是我在最简单的例子中看到的,从 irb 运行。目录“parent”包含一个名为“symlink”的符号链接(symbolic link),它指向一个目标目录。目标存在。

irb(main):001:0> require 'fileutils'
=> true
irb(main):003:0> FileUtils.rm_r 'parent'
Errno::ENOENT: No such file or directory - parent/symlink
from c:/engapps/Ruby/lib/ruby/2.0.0/fileutils.rb:1349:in `open'
from c:/engapps/Ruby/lib/ruby/2.0.0/fileutils.rb:1349:in `entries'
from c:/engapps/Ruby/lib/ruby/2.0.0/fileutils.rb:1349:in `entries'
from c:/engapps/Ruby/lib/ruby/2.0.0/fileutils.rb:1536:in `postorder_traverse'
from c:/engapps/Ruby/lib/ruby/2.0.0/fileutils.rb:1537:in `block in postorder_traverse'
from c:/engapps/Ruby/lib/ruby/2.0.0/fileutils.rb:1536:in `each'
from c:/engapps/Ruby/lib/ruby/2.0.0/fileutils.rb:1536:in `postorder_traverse'
from c:/engapps/Ruby/lib/ruby/2.0.0/fileutils.rb:837:in `remove_entry'
from c:/engapps/Ruby/lib/ruby/2.0.0/fileutils.rb:695:in `block in rm_r'
from c:/engapps/Ruby/lib/ruby/2.0.0/fileutils.rb:691:in `each'
from c:/engapps/Ruby/lib/ruby/2.0.0/fileutils.rb:691:in `rm_r'

除了 system('rmdir/s/q parent') 这样的解决方案之外,这里还有其他选择吗?我知道 FileUtils.symlink() 在 Windows 上不受支持,但 FileUtils.rm_r() 的核心故障完全是另一回事。自从 Win 7 出现以来,这一直是一个问题,甚至可能回到 Vista,我还没有找到一个不涉及到 CMD.EXE 的好的解决方案。

注意:FileUtils.rm_rf() 不会改进。

最佳答案

我已经阅读了 ruby​​ 2.0 中 fileutils.rb 的源代码,以及它所依赖的代码。从这个来源中可以清楚地看出,没有考虑 Windows 符号链接(symbolic link),尽管在这个模块中,Win32 的代码与非 Windows 的行为不同。似乎没有任何关于 Windows 符号链接(symbolic link)的 Ruby 公开票证,所以答案是,Ruby 不处理它,而且看起来不会很快处理。所以 system('rmdir/s/q parent') 解决方法是删除包含符号链接(symbolic link)的 Windows 目录树的方法。

关于当存在指向目录 : alternatives? 的符号链接(symbolic link)时,Ruby FileUtils.rm_r 在 Windows 上失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27995503/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com