DOSISH 対応

ruby version 1.7 では、DOSISH対応(DOS/Windows のパス名の扱いに対する変 更)が含まれています*1。 (現在の)変更点を以下に示します。

なお、これらの変更は mswin32版、mingw32版, human68k版, os2_emx版の Ruby にのみあてはまります。

とりあえずの目標として、

への対応が挙げられていますが、ドライブレター対応などの微妙な部分については現在もruby-listなどで議論が継続されています。 現時点では、Fileの各メソッドに対する\対応, マルチバイトパス名対応, UNC 対応が実装されています。ruby-dev:13817[外部], ruby-dev:14097[外部]

以下、各メソッドの挙動について...

File.dirname

パスセパレータとして従来の/に加えて\も認識するようになっています。 これに合わせて、マルチバイトで記述されたパス名への対応も行われています。

p File.dirname("C:\\foo\\bar")

=> ruby 1.6.4 (2001-06-04) [i586-mswin32]
   "."

=> ruby 1.7.1 (2001-08-16) [i586-mswin32]
   "C:\\foo"

ドライブレター対応に関しては、下記のような案が提示されています。

p File.dirname("C:/foo")
p File.dirname("C:\\foo")
p File.dirname("C:foo")

=> ruby 1.6.4 (2001-06-04) [i586-mswin32]
   "C:"
   "."
   "."

=> ruby 1.7.1 (2001-08-16) [i586-mswin32]
   "C:"
   "C:"
   "."

=> Cheng 案 ((<ruby-dev:13817>))
   "C:/"
   "C:\\"
   "C:"

=> なかだ案 ((<ruby-list:31073>))
   "C:/"
   "C:\\"
   "C:."
File.basename

パスセパレータとして従来の/に加えて\も認識するようになっています。 これに合わせて、マルチバイトで記述されたパス名への対応も行われています。

p File.basename("C:\\foo\\bar")

=> ruby 1.6.4 (2001-06-04) [i586-mswin32]
   "C:\\foo\\bar"

=> ruby 1.7.1 (2001-08-16) [i586-mswin32]
   "bar"
File.split

File.dirname と File.basename が変更されているので、File.split もそれに準じた 結果を返します。

File.expand_path

ドライブレター対応に関して、下記のような案が提示されています。

Dir.chdir("D:/")
p File.expand_path("C:foo", "C:/bar")
p File.expand_path("D:foo", "C:/bar")

=> ruby 1.6.4 (2001-06-04) [i586-mswin32]
   "C:/bar/C:foo"
   "C:/bar/D:foo"

=> なかだ案 ((<ruby-dev:13914>))
   "C:/bar/foo"
   "D:/foo"

=> 新井案 ((<ruby-list:30970>))
   "C:/bar/foo"
   (なんらかの例外)
File.join

ドライブレター対応に関して、下記のような案が提示されています。

p File.join("c:", "foo")
p File.join("c:/", "foo")
p File.join("c:.", "foo")
p File.join("c:", "/foo")

=> ruby 1.6.4 (2001-06-04) [i586-mswin32]
   "c:/foo"
   "c://foo"
   "c:./foo"
   "c://foo"

=> なかむら(う)案 ((<ruby-list:31103>))
   "c:/foo"
   "c:/foo"
   "c:./foo"
   "c://foo"

=> 新井案 ((<ruby-list:31185>))
   "c:./foo"
   "c:/foo"
   "c:./foo"
   "c:./foo"
File.fnmatch
Dir.glob
Dir[]

*1拡張ライブラリによる別実装として、 RAA[外部]RAA:DOSishがあります