How to solve Windows PATH in Ruby?

require ‘pathname’
p = Pathname.new(“C:\ruby\samples\myFile”)
dir = p.dirname
base = p.basename
puts base

I just like to use “myFile”,but p.basename seems not work on Windows
Platform.

How to solve this kind of problem?

any help or suggest would be greatly appreciated much.
Thanks a lot.

Warachet S.

Hi,

just escape your backlashes, or use forward slashes (/).

In my code I convert all paths tu unix style, work with them in that
form, and just before calling windows I convert them back. It makes
things much simpler. And in most cases even windows can handle forward
slashes.

J.

On 7/27/06, zdk [email protected] wrote:

require ‘pathname’
p = Pathname.new(“C:\ruby\samples\myFile”)

p = Pathname.new(“C:\ruby\samples\myFile”)

Hi,

Why bothrer and remember which slash to use ? Ruby does it for you.
Here is my approach:

require ‘pathname’
p = Pathname.new(File.join(‘c:’, ‘ruby’, ‘samples’, ‘myfile’))
=> #Pathname:c:/ruby/samples/myfile
puts p.dirname
=>c:/ruby/samples
puts p.basename
=> myfile

File.join just cancatenates all strings with appropriate path delimiter.
And AFAIK ruby internally always uses / slash (e.g. puts dirname will
print c:/ruby/samples also on windows).


Martins

I think this also depends on what ruby you are using. If you are using
One Click installer Ruby for Windows, then your code should work as
you have it. If you are using cygwin, then it probably won’t work
correctly with the backslashes.

Based on the path you are referring to: C:\ruby, I assume you are
using One Click Ruby. However, in either event, forward slash should
work.

If you’re going to use blackslashes in a literal string you need to
double them because the backslash is an escape character. So, you
really need to do this:

p = Pathname.new(“C:\ruby\samples\myFile”)

Curt