potisanのプログラミングメモ

趣味のプログラマーがプログラミング関係で気になったことや調べたことをいつでも忘れられるようにメモするブログです。はてなブログ無料版なので記事の上の方はたぶん広告です。記事中にも広告挿入されるみたいです。

Ruby 2 DOSISHなパス(「\」(バックスラッシュ)区切りのパス)を整形する

本文

File::globで取得されたファイルパスの様に始めからRubyで取得されたファイルパスなら良いのですが、環境変数やWin32 APIが絡んでくるとパス区切りに「\」(バックスラッシュ)が使われます(DOSISH)。今回はそれにとりあえず対処するためのコードです。動作確認はWindows 7ですが、UNIXCygwinなどでは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と絡めようと思った時にバグの原因となりそうだったので今回のコードに至りました。もっと簡潔だったり保守性の高いコードがあったら教えて頂けると幸いです。