PHWinfo banniere

Titres
PORTAIL ANNUAIRE ARTICLES COMPARATEUR HÉBERGEURS DEVIS FORUMS RÉDUCTEUR D'URL
Précédent   PHWinfo > Autres forums > Forum Programmation & Conception > comp.lang.ruby > wrong File::SEPARATOR ?
S'inscrire FAQ Membres Recherche Messages du jour Marquer les forums comme lus
wrong File::SEPARATOR ?

Réponse
 
LinkBack Outils de la discussion
Vieux 14/09/2007, 10h51   #1
Ronald Fischer
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut wrong File::SEPARATOR ?

On my Ruby 1.8.5 under Windows, I have:

C:> ruby -e 'puts File::SEPARATOR'=20
/

Shouldn't it output '\' instead?

Ronald
--=20
Ronald Fischer <ronald.fischer@venyon.com>
Phone: +49-89-452133-162

  Réponse avec citation
Vieux 14/09/2007, 11h12   #2
Dan Zwell
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: wrong File::SEPARATOR ?

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

  Réponse avec citation
Vieux 14/09/2007, 11h47   #3
Ronald Fischer
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: wrong File::SEPARATOR ?

> Nope, this variable correct because within ruby and its core=20
> libraries,=20
> everything can open files with forward slash separated paths.=20
> 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=20
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

  Réponse avec citation
Vieux 14/09/2007, 12h47   #4
Dan Zwell
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: wrong File::SEPARATOR ?

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

  Réponse avec citation
Vieux 14/09/2007, 13h27   #5
James Edward Gray II
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: wrong File::SEPARATOR ?

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?
>> Ronald

>
> 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.

James Edward Gray II


  Réponse avec citation
Vieux 14/09/2007, 15h11   #6
Bill Kelly
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: wrong File::SEPARATOR ?


From: "James Edward Gray II" <james@grayproductions.net>
> 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?


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



  Réponse avec citation
Vieux 17/09/2007, 09h20   #7
Ronald Fischer
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: wrong File::SEPARATOR ?

> You have a point, as I just can't imagine that the file=20
> separator used=20
> by Ruby internally will change any time soon (but who=20
> knows?).=20


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

  Réponse avec citation
Vieux 17/09/2007, 09h22   #8
Ronald Fischer
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: wrong File::SEPARATOR ?

> The truth is that Windows itself understands / as a path separator. =20
> 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

  Réponse avec citation
Réponse


Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are oui
Pingbacks are oui
Refbacks are oui


Fuseau horaire GMT +1. Il est actuellement 07h21.


Édité par : vBulletin® version 3.7.2
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.2.0 RC5 Tous droits réservés.
Version française #16 par l'association vBulletin francophone
PHWinfo est un site Éducation Sans Frontières
Ad Management by RedTyger
©Tous droits réservés par les parties respectives
Page generated in 0,12868 seconds with 16 queries