On Mar 29, 2007, at 10:35 PM, Wang Dong wrote: > On 3月30日, 上午9时21分, "Bret Pettichord" <bpettich... / gmail.com> > wrote: >> I just had to work on some code that ran into trouble, because Ruby >> uses "/" to separate folders, but the path was being passed to a >> separate command (using system) that expected Window's paths to use >> "\". >> >> C:\Users\bret>irb >> irb(main):001:0> File.join "foo", "bar" >> => "foo/bar" >> irb(main):002:0> >> >> I told my collegues that instead of using File.join, they should just >> use + "\\" + >> But this got me to wondering what the point of File.join was if you >> couldn't trust it to construct paths correctly (unless you were sure >> that the path was only going to be used by other ruby commands). >> >> Is there a rationale? Is there a different library that i should be >> using instead? >> >> bret > > Windows NT support '/' but not win98 or DOS. You could try something like this (note UNTESTED since I'm only on Unixes): class File def to_s expand=false (expand ? File.expand_path(path) : path).gsub('/', SEPARATOR) end end Used then like this: >> File.new('/tmp/foo','w').to_s(true) => "/tmp/foo" >> File.new('/tmp/../tmp/./foo','w').to_s(true) => "/tmp/foo" >> File.new('/tmp/../tmp/./foo','w').to_s => "/tmp/../tmp/./foo" Or presumably on Windows: >> File.new(File.join('foo','bar'),'w').to_s(true) => "C:\\Users\\bret\\foo\\bar" >> File.new(File.join('foo','bar'),'w').to_s => "foo\\bar" You could also define a String#as_file to do the same .gsub ('/', ::File::SEPARATOR) If Microsoft hadn't broken the path separator in the first place, they wouldn't have had to fix it. ;-) -Rob Rob Biedenharn http://agileconsultingllc.com Rob / AgileConsultingLLC.com