The case issue is tracked by the following MRI bug -
http://redmine.ruby-lang.org/issues/show/1266. It will be fixed in some
future version of MRI.
[mailto:firstname.lastname@example.org] On Behalf Of Jimmy
Sent: Tuesday, April 21, 2009 10:59 AM
Subject: Re: [Ironruby-core] Case of drive letter
(Responding late … hopefully this is still useful)
FILE always uses lower-case drive letter
FILE is just the value you gave to require/load. FILE and
$PROGRAM_NAME only get munged with when running ruby.exe, but it doesn’t
touch casing, only changes all directory separators to ‘/’.
irb(main):001:0> load ‘C:\dev\foo.rb’
irb(main):001:0> load ‘c:\dev\foo.rb’
My recent FILE changes made IronRuby work identically to MRI, but
that only changes the path separator, does nothing with casing. IronRuby
behaves the same as this.
[mailto:email@example.com] On Behalf Of Shri B.
Sent: Tuesday, April 07, 2009 11:36 AM
Subject: [Ironruby-core] Case of drive letter
Using MRI on Windows, Dir.pwd can use either lower-case or upper-case
for the drive letter (“C:/” or “c:/”) depending on the Command Prompt it
is run from. However, FILE always uses lower-case drive letter. This
can cause problems when comparing Dir.pwd and FILE. For eg,
raises an ArgumentError if the arguments use different cases for the
C:\Users\sborde> cat c:\bugs\rb1.rb
C:\Users\sborde> c:\Ruby\bin\ruby.exe c:\bugs\rb1.rb
c:/Ruby/lib/ruby/1.8/pathname.rb:709:in `relative_path_from’: different
“C:/” and “c:/bugs/rb1.rb” (ArgumentError)
I did not find any good documentation on which case is used by Command
Prompt, but https://lists.ubuntu.com/archives/bazaar/2006q2/013921.html
refers to the issue. I can create Command Prompts with either case by
creating a shortcut on the desktop, and specifying a “Start in” folder
property for the shortcut. Command Prompt will use the case specified
for the “Start in” folder.
Does anyone have experience dealing with this issue? What is the
recommended solution? I would rather not check the case of the drive
letter manually. I looked for APIs which would convert the drive letter
to lower-case, but could not find anything.