#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