On my Ruby 1.8.5 under Windows, I have:
C:> ruby -e 'puts File::SEPARATOR'
/
Shouldn't it output '\' instead?
Ronald
···
--
Ronald Fischer <ronald.fischer@venyon.com>
Phone: +49-89-452133-162
On my Ruby 1.8.5 under Windows, I have:
C:> ruby -e 'puts File::SEPARATOR'
/
Shouldn't it output '\' instead?
Ronald
--
Ronald Fischer <ronald.fischer@venyon.com>
Phone: +49-89-452133-162
Ronald Fischer wrote:
On my Ruby 1.8.5 under Windows, I have:
C:> ruby -e 'puts File::SEPARATOR' /
Shouldn't it output '\' instead?
Ronald
Nope, this variable correct because within ruby and its core libraries, everything can open files with forward slash separated paths. Try it. It is probably more reliable than using paths with backslashes (no potential for confusing the file separator with the escape character). Now, if you need to pass the path to a non-ruby app, then you will need to convert them to backslashes.
Dan
Ronald Fischer wrote:
On my Ruby 1.8.5 under Windows, I have:
C:> ruby -e 'puts File::SEPARATOR'
/
Shouldn't it output '\' instead?
Not sure if this is answered yet, but Windows accepts /. That prevents endless hacks in all the legacy code that Windows must support.
Now all we need is a Notepad.exe that, between getting every encoding in the world correct, will respectfully display a lowly \n correctly...
--
Phlip
Nope, this variable correct because within ruby and its core
libraries,
everything can open files with forward slash separated paths.
Try it.
I know, and that's what I am doing anyway. I just thought - after
reading about File::SEPARATOR - that this would be a good way
to pass path parameters on to external processes.
So this is not OS dependend, and within *every* Ruby implementation
it is supposed to be a slash ... not that much sense defining
it as a named constant then, isn't it?
Ronald
The truth is that Windows itself understands / as a path separator. It's just that many interfaces, like the DOS shells, do not.
James Edward Gray II
On Sep 14, 2007, at 5:12 AM, Dan Zwell wrote:
Ronald Fischer wrote:
On my Ruby 1.8.5 under Windows, I have:
C:> ruby -e 'puts File::SEPARATOR' /
Shouldn't it output '\' instead?
RonaldNope, this variable correct because within ruby and its core libraries, everything can open files with forward slash separated paths. Try it.
For what it's worth in your tests (like File.join) for some reason my
windows implementation, and maybe others as well, File::Separator and
File::SEPARATOR are not just aliases of eachother; changing one does not
change the other.
-------------------------------------------
Daniel Brumbaugh Keeney
Devi Web Development
Devi.WebMaster@gMail.com
-------------------------------------------
Ronald Fischer wrote:
Nope, this variable correct because within ruby and its core libraries, everything can open files with forward slash separated paths. Try it.
I know, and that's what I am doing anyway. I just thought - after
reading about File::SEPARATOR - that this would be a good way to pass path parameters on to external processes.So this is not OS dependend, and within *every* Ruby implementation
it is supposed to be a slash ... not that much sense defining
it as a named constant then, isn't it?Ronald
You have a point, as I just can't imagine that the file separator used by Ruby internally will change any time soon (but who knows?). Thinking about valid use cases, I tried changing the value of this constant, only to find that File.joint doesn't use the value:
>> File::SEPARATOR = "\\"
(irb):3: warning: already initialized constant SEPARATOR
=> "\\"
>> File.join("c:", "My Documents")
=> "c:/My Documents"
>> File::SEPARATOR
=> "\\"
I would have expected the result to be "c:\\My Documents"
So the best use case (in my opinion) of this variable does not work. This behavior is in direct contradiction with the documentation for File.join, by the way (Ruby 1.8.6).
I wonder whether this has been fixed in 1.9? It really does seem a bug that File.join does not use File::SEPARATOR (when the docs say it does). I looked at the c code of this function, and it does use a variable called "separator", but it seems changing File::SEPARATOR does not change the c variable.
Dan
Ronald Fischer wrote:
On my Ruby 1.8.5 under Windows, I have:
C:> ruby -e 'puts File::SEPARATOR' /
Shouldn't it output '\' instead?
Windows ruby does define ALT_SEPARATOR:
File::ALT_SEPARATOR
=> "\\"
(Really a single backslash, self-escaped in the inspect.)
Nope, this variable correct because within ruby and its core libraries, everything can open files with forward slash separated paths. Try it.
The truth is that Windows itself understands / as a path separator. It's just that many interfaces, like the DOS shells, do not.
Just a potential word of caution going forward... I seem to
recall reading on this list awhile back that the Unicode
file API's in Windows *do not* accept forward slashes for path separators.
(If that's true, then this may be an issue if Unicode filename
support is ever added to win32 ruby... Although I suppose the
conversion from / to \ could be handled behind the scenes.)
Regards,
Bill
From: "James Edward Gray II" <james@grayproductions.net>
On Sep 14, 2007, at 5:12 AM, Dan Zwell wrote:
The truth is that Windows itself understands / as a path separator.
It's just that many interfaces, like the DOS shells, do not.
And that's exactly the problem: When shelling out to external programs,
and / is there usually interpreted as leading in an option (like "-"
does in Posix like systems).
Ronald
You have a point, as I just can't imagine that the file
separator used
by Ruby internally will change any time soon (but who
knows?).
I think this can be ruled out, because there probably won't be
too many apps around which just *know* that Ruby accepts /, and
have slashes hardcoded everywhere. I too have never thought about
the existence of File::SEPARATOR as a constant, and came accross
it only when I wanted to construct file names for external applications,
which should be OS independent.
Ronald
Windows ruby does define ALT_SEPARATOR:
>> File::ALT_SEPARATOR
=> "\\"
Is it guaranteed to also exist on Linux or Mac Ruby, having the
value '/' on those systems?
Ronald
--
Ronald Fischer <ronald.fischer@venyon.com>
Phone: +49-89-452133-162
Those systems don't have an alternate separator so it is set to nil.
On Sep 17, 2007, at 01:23, Ronald Fischer wrote:
Windows ruby does define ALT_SEPARATOR:
File::ALT_SEPARATOR
=> "\\"
Is it guaranteed to also exist on Linux or Mac Ruby, having the
value '/' on those systems?
--
Poor workers blame their tools. Good workers build better tools. The
best workers get their tools to do the work for them. -- Syndicate Wars