新井です。

今まで、ついて行けてなかったクセに割り込みですみませんが^^;

In message "[ruby-list:31184] Re: file exist check method?"
  on 02 Sep 2001 04:35:31 +0900,
  "U.Nakamura" <usa / osb.att.ne.jp> wrote:
> こんにちは、なかむら(う)です。

> まぁ、これで決めたら二度と変えられないという話でもないと思う
> ので、今回はこのパターンは抜きで推してみたいと思います。
> 

| (1) File.dirnameに関して
|   (a) File.dirname("c:/foo")  # => "c:/"
|   (b) File.dirname("c:foo")   # => "c:."

異論なし

| (2) File.expand_pathに関して(Dir.chdir("d:/")と仮定)
|   (a) File.expand_path("c:foo", "c:/bar") # => "c:/bar/foo"
|   (b) File.expand_path("d:foo", "c:/bar") # => "d:/foo"

納得はできます。

| (3) File.joinに関して
|   (a) File.join("c:", "foo")  # => "c:/foo"
|   (b) File.join("c:/", "foo") # => "c:/foo"
|   (c) File.join("c:.", "foo") # => "c:./foo"
|   (d) File.join("c:", "/foo") # => "c://foo"
| 

以下のような処理を仮定したとき

  file = "c:/foo/bar.txt"
  dir = "d:"

  File.copy(file, dir)
  p File.join(dir, File.basename file)
  => "d:bar.txt"

が、うまく動くかどうかを考えると(a) は、c:foo あるいは 
c:./foo であって欲しい気持です。曖昧な指定をしてるのが悪いと
も言えますけど、例えば第一引数にドライブレターだけが渡された
とき"." を補う((c)の解釈)ということにすればルールは明確にな
り曖昧さがなくなります。"c:" は、"c:." の意味であるという見
方は dirname でもやってるわけですから一貫性もあるように思い
ます。

そうすると、(d) の答えも見えます。

# 私の意見は他の人とズレてるらしい(^^;

> 念のために書くと、File.joinに関しては非DOSISHにも影響が出ま
> すので、そっち系の賛否も知りたいところ。

これはどういう点でしょう?Unix系でも 結合部分の重複するセパ
レータガ 1 つになるということですか?それはそれで構わないと
思います。

--
新井康司 (Koji Arai)