2013-10-26 56 views
2

在某些平臺(Windows)上,Ruby不支持File.symlink,因此引發了NotImplemented異常。我有一些可以使用或不使用符號鏈接的代碼,所以它需要適應。如何判斷是否支持File.symlink

我拿出來發現符號鏈接是否被支持的唯一方法是嘗試創建一個:

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 

這是緩慢的(大量的文件系統操作的!),似乎笨重。緩慢可以通過memoization來處理,但這只是給已經笨重的方法增加了更多機器。

是否有更快或更優雅的方式來發現是否支持File.symlink

回答

3

這來自test_fileuils.rb

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

的代碼不會產生任何符號鏈接(它甚至不觸及文件系統)。在支持符號鏈接的系統上,由於nil參數引發TypeError,否則(Windows)a NotImplementedError

+0

更快捷_and_更優雅。謝謝! –

相關問題