C言語関係掲示板

過去ログ

No631 ディレクトリの比較

[戻る] [ホームページ]
No.6606

ディレクトリの比較
投稿者---まつ(2003/05/22 13:45:46)


はじめして、まつです。

質問です。

プログラム内にあらかじめディレクトリ情報(絶対パスのみ)を持ち、
引数として、ファイルのパス(相対パスまたは絶対パス)を渡し
プログラム内のディレクトリ情報の配下にあるファイルならば
OK、ないならNGとしたいのですが、
この場合、ディレクトリの比較はどうすればよいのでしょうか?
とくに相対パスと絶対パスの比較の方法がよく分かりません。
お願いします。

No.6623

Re:ディレクトリの比較
投稿者---kikk(2003/05/22 17:04:52)


ども。


まず、'/'(または'\\')ではじまっているかをみて、絶対パスか相対パスかを
判定します。相対パスの場合は絶対パスに変換してください。変換方法は
少なくとも下記の2通りあります。DOS/Win系の処理系ではドライブレターが
含まれるかどうかも考慮してください。

1. getcwd()でカレントディレクトリを取得した後、相対パスをマージする。
"./"や"../"が含まれていた場合はそれを解消すること(直前のディレクトリ
を削る等)。

2. 最初に、getcwd()でカレントを取得しておく。次に、chdir()で実際に
引数のパスに移動し、getcwd()を使い、絶対パスを取得。最後に、最初に
取得したディレクトリにchdir()で戻っておく。

変換後、strcmp()等で比較してください。

なお、getcwd()とchdir()は非標準な関数です。UNIX系の処理系なら
unistd.h、DOS/Win系ならdir.hかio.h辺りで(たぶん)宣言されています。

ついでに。
場合によっては、非標準関数のaccess()やstat()が何かの役に立つかも
しれません。http://www.linux.or.jp/JM/ あたりで調べてみてください。


では。

No.6652

Re:ディレクトリの比較
投稿者---まつ(2003/05/23 09:38:50)


まつです。

getcwd()やchdir()を使ってみてある程度
イメージがつかめました。
ありがとうございました。