#99 Article 923 Posted at 1995/08/31 03:31:03 by MSP-Iris (MAP4370) [Q.TC]

Subject: Re: Re: Re: Turbo-Cのfindfirst()に関する質問 /921 /920 /919

Cのことはさっぱりわからないので、一般論としてですが...

> そういうこっちゃだと思います。DOSの規格上の問題なのかしらん。

 そういうことになると思います。
 例えば A:\FOO\BAR というディレクトリがあった場合、ルートのディレクトリ
エントリを見れば FOO という(ディレクトリ属性の立った)ものがあり、A:\FOO
のディレクトリエントリを見れば BAR という(ディレクトリ属性の立った)もの
があるわけです。だからディレクトリエントリを見れば、存在するかしないかは
わかります。
 しかし、ルートディレクトリは必ず存在しますし、そのディレクトリエントリ
の存在場所も決まっていますので、見つける手段はありません(見つける必要が
ないというべきか)。そもそも、あるディレクトリを探す時には1つ上のディレ
クトリから探すことになる(A:\FOO\BAR なら A:\FOO から探す)のですが、ルー
トに関して言えば、それより1つ上の階層は存在しませんから、見つからないの
も当たり前とも言えます。

 findfirst() というのは、おそらくDOSファンクションコールの 4EH を実行
しているのだと思いますが、そうだとすれば、上記の理由によりルートは見つか
りません。

>2.最後が "\\" , "." , ".." のいずれかであれば、ディレクトリと判断する。

 これは危険だと思います。
 DOSの通常の指定方法ではディレクトリの最後に '\' は付加しません。ルー
トだけが例外です(場合によってはルートですら最後の '\' が付きません。ファ
ンクションコールの 47H などがそうです)。

 方法としては chdir() してみるのが一番速いような気がします。
 あと、パスを自前で解釈するのもそんなに面倒じゃないですよ。
 この場合、パス指定に絶対指定と相対指定があること、パスを追うためにカレ
ントを変更した場合は最後に元に戻すこと、この辺がポイントでしょうか。

                                  MAP4370    MSP-Iris