C言語関係掲示板

過去ログ

No.391.ディレクトリ内にあるファイル名を取得したい

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

ファイル検索について
投稿者---ゆう(2002/09/11 10:56:28)


はじめまして。ゆうです。
ある指定されたディレクトリ内にあるファイル名を取得したいのですが、
なにかいい方法ってあるでしょうか?


No.2695

Re:ファイル検索について
投稿者---みずや(2002/09/13 11:46:52)


>はじめまして。ゆうです。
>ある指定されたディレクトリ内にあるファイル名を取得したいのですが、
>なにかいい方法ってあるでしょうか?

ゆうさんの使用している環境がわからないのでうまく動作するかはわかり
ませんが、opendir と readdir という関数を使う方法があります。

インクルードするヘッダファイルは、sys/type.h と dirent.h です。

opendir は 開きたいディレクトリのパス(絶対パスか相対パス)の入った
文字列を引数にとり、DIR 型のポインタを返します。
DIR 型というのは ファイルを開くときに使う FILE 型のようなものです。

例えば、
DIR *dp ;
と宣言しておいて、
dp = opendir( "." ) ;
とすればカレントディレクトリを開くことができます。

readdir は、opendir で取得した DIR 型ポインタを引数にとり、そのディ
レクトリにある1つのファイルの情報を返します。
このファイルの情報は struct dirent 型と定義されていて、返り値はその
ポインタになっています。

例えば、上の DIR 型の宣言に加えて
struct dirent *directory ;
と宣言し、opendir の後に
directory = readdir( dp ) ;
とすると、カレントディレクトリ内の最初のファイルの情報が directory
に収められます。

dirent 型は構造体なのでその中にいろいろなデータを持っており、ファイ
ル名は d_name という変数に入っています。

つまり、directory->d_name にファイル名が入っているわけです。

readdir は実行するたびに次のファイルの情報を返し、すべてのファイル
の情報を返し終ると NULL を返すので、ループですべてのファイル名を取
得するようにつくることができます。