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,
Pathname#relative_path_fromhttp://ruby-doc.org/core/classes/Pathname.html#M001745
raises an ArgumentError if the arguments use different cases for the
drive letter.
C:\Users\sborde> cat c:\bugs\rb1.rb
require ‘pathname’
Pathname.new(Dir.pwd).relative_path_from(Pathname.new(FILE))
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
prefix:
“C:/” and “c:/bugs/rb1.rb” (ArgumentError)
from c:/bugs/rb1.rb:2
I did not find any good documentation on which case is used by Command
Prompt, but [MERGE] win32 important fix: convert drive letter to uppercase not lowercase
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.
Thanks,
Shri