本文
File::globで取得されたファイルパスの様に始めからRubyで取得されたファイルパスなら良いのですが、環境変数やWin32 APIが絡んでくるとパス区切りに「\」(バックスラッシュ)が使われます(DOSISH)。今回はそれにとりあえず対処するためのコードです。動作確認はWindows 7ですが、UNIXやCygwinなどではnil
が設定されるそうなので何も起きないだけだと思います。
s = ENV['UserProfile'] #=> "C:\\Users\\<UserName>" s.gsub(File::ALT_SEPARATOR) {File::SEPARATOR} #=> "C:/Users/<UserName>"
一行で書くほうが普通かもしれません。
ENV['UserProfile'].gsub(File::ALT_SEPARATOR) {File::SEPARATOR} #=> "C:/Users/<UserName>"
使い古された方法かもしれませんが、自分用のメモも含めて。
補足
File::joinやPathname or Pathname::new or Pathname::+では「/」(スラッシュ)と「\」が混在した状態になります。ちゃんと扱えるようにRuby側でDOSISH対応が行われている(Ruby 1.9.3 リファレンスマニュアル > DOSISH 対応)そうですが、Win32 APIと絡めようと思った時にバグの原因となりそうだったので今回のコードに至りました。もっと簡潔だったり保守性の高いコードがあったら教えて頂けると幸いです。