potisanのプログラミングメモ

プログラミング素人です。昔の自分を育ててくれたネット情報に少しでも貢献できるよう、情報を貯めていこうと思っています。Windows環境のC++やC#がメインです。

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と絡めようと思った時にバグの原因となりそうだったので今回のコードに至りました。もっと簡潔だったり保守性の高いコードがあったら教えて頂けると幸いです。