C言語関係掲示板

過去ログ

No.933 カレントディレクトリのファイル検索

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

構造体のメンバ定義
投稿者---free(2004/01/16 14:29:14)


いつも参考にさせていただいております。

readdirのデータを受ける構造体を struct dirent *で表すようですが、
そのプログラムで定義していないメンバを使用しても正常に動くのでしょうか?

たとえば、struct dirent *entry; //entryという構造体を定義
この後に、entry->d_name //構造体entryのd_name(ポインタ)
が出てくる場合、d_nameをこのプログラムで定義しなければならないのか
教えていただきたく思っております。


No.11854

Re:構造体のメンバ定義
投稿者---namani(2004/01/16 15:27:36)


>たとえば、struct dirent *entry; //entryという構造体を定義

これは定義しているのではなくstruct direntのポインタ変数entryを宣言しているのですね
http://www9.plala.or.jp/sgwr-t/c/sec15.html

>この後に、entry->d_name //構造体entryのd_name(ポインタ)
>が出てくる場合、d_nameをこのプログラムで定義しなければならないのか
>教えていただきたく思っております。

d_name は struct direntのメンバーですので、
linux/dirent.h(linuxの場合)とかsys/dirent.h(Solarisの場合?)に、

struct dirent
{
    long d_ino;                 /* inode number */
    off_t d_off;                /* offset to this dirent */
    unsigned short d_reclen;    /* length of this d_name */
    char d_name [NAME_MAX+1];   /* file name (null-terminated) */
}


と定義されています。
readdirを使うのに必要なヘッダをincludeしてあれば使えると思いますが

No.11855

カレントディレクトリのファイル検索は可能か
投稿者---free(2004/01/16 16:09:38)


そうだったのですか。
ありがとうございます。
今回質問させていただいたのは、カレントディレクトリのファイル名を検索して、
.cや.xlsといった特定のファイルだけを出力するのに必要だと考えたからですが、

実際には、opendirやreaddirなしでもカレントディレクトリのファイル検索は可能なのでしょうか。
作業の効率にかかわってくるので、よく知っておきたいので
度々ではありますが、よろしくお願いいたします。

No.11863

Re:カレントディレクトリのファイル検索は可能か
投稿者---namani(2004/01/16 17:06:04)


>そうだったのですか。
>ありがとうございます。
>今回質問させていただいたのは、カレントディレクトリのファイル名を検索して、
>.cや.xlsといった特定のファイルだけを出力するのに必要だと考えたからですが、
>
>実際には、opendirやreaddirなしでもカレントディレクトリのファイル検索は可能なのでしょうか。

条件がかなり限定されますがopendirとかを使わないでやるなら
シェルにワイルドカード入力を判断させるとか・・・
(たとえばxxx.c yyyy.c zzzz.xls aaaa.txt があるディレクトリで
./prog *.c *.xls で実行するとシェルによってこれがxxx.c yyyy.c zzzz.xls
と判断されるので、これがargv[]に入ってきます)

あとはパイプをつかってlsコマンドの出力を横取りするとかかな
こんな感じで・・・
FILE *f;
char buf[256];
f = popen("ls *.c *.xls","r");
while(fgets(buf,256,f) != NULL);

#上の2例を使うなら素直にopendirとかでやったほうがいいと思います(ーー

Windows環境ならまた別の方法でやることになりますね
(opendir関数とかないですから)

No.11864

Re:カレントディレクトリのファイル検索は可能か
投稿者---YuO(2004/01/16 17:06:31)


>実際には、opendirやreaddirなしでもカレントディレクトリのファイル検索は可能なのでしょうか。

お約束的な質問ですが,opendirって何ですか?

opendirやreaddirは標準の関数ではないですから,環境を記述しておく必要がありますよ。
例えば,WindowsであればFindFirstFileとFindNextFileを使うことでファイルを検索するでしょうし。