2

在某些平台 (Windows) 上,Ruby 不支持File.symlink ,从而引发NotImplemented异常。我有一些代码可以使用或不使用符号链接,所以它需要适应。

我想出的发现是否支持符号链接的唯一方法是尝试创建一个:

  def symlink_supported?
    Dir.mktmpdir do |dir|
      target_path = File.join(dir, 'target')
      symlink_path = File.join(dir, 'symlink')
      FileUtils.touch target_path
      begin
        FileUtils.ln_s target_path, symlink_path
        true
      rescue NotImplementedError
        false
      end
    end
  end

这很慢(很多文件系统操作!)而且看起来很笨重。缓慢可以通过记忆来处理,但这只会给已经很笨重的方法增加更多的机制。

是否有更快或更优雅的方式来发现是否支持File.symlink

4

1 回答 1

3

这来自test_fileuils.rb

def check_have_symlink?
  File.symlink nil, nil
rescue NotImplementedError
  return false
rescue
  return true
end

该代码不创建任何符号链接(它甚至不触及文件系统)。在支持符号链接的系统TypeError上,由于nil参数而引发了 a ,否则(Windows) a NotImplementedError

于 2013-10-26T14:33:42.597 回答