ページ 11

プロンプト

Posted: 2010年9月05日(日) 06:56
by やっくん
おはようございます。

プロンプトで
Linuxでは ls
Windowsでは dir
などを用いれば、任意の階層にあるファイル名を調べることが出来ます。

これをCまたはC++で書くとどのようになりますか?

Pathを得る関数があればそれを教えていただけ無いでしょうか。

できれば、その関数の内部がどのようになっているかまで知りたいです。

今、行いたいのはある階層にあるファイルを全て逐次開いていくということです。

<環境>
Linuxならばgcc
WindowsならばVC++2008
を用いております。

よろしくお願いいたします。

<追記>
ピンポイントで行いたいことを言ってしまえば、任意のディレクトリ中のファイルの総行数をカウントしたいだけです(^^;
もし、そういうソフトがお手軽にあればそれでも構いません。
全てのファイルのパスを記述した1つのファイルを作っておき、それを読み込ませてカウントするというのでも良いのですが、ファイルを追加していく度にパスを書く手間が掛かるのは面倒なのでお手軽にいつでもカウントをできる状態にしたいです。 画像

Re:プロンプト

Posted: 2010年9月05日(日) 07:25
by へろりくしょん
C言語の標準関数にそういった機能を持つ関数は無かったはずです。 多分。

gccが今手元に無いのでちょっと確認は出来ませんが、opendir()、readdir()、closedir()関数あたりが用意されていたと思います。

Windowsでしたら、GetCurrentDir()、FindFirstFile()、FindNextFile()、FindClose()APIが用意されています。

ファイルパスはOSによって表現方法が異なりますから、取得するにはOSにお伺いを立てるしかないような気がします。 多分。

Re:プロンプト

Posted: 2010年9月05日(日) 07:40
by へろりくしょん
こんな感じですか。
#include <windows.h>

int getCount(const char *path)
{
    ...
}

int main(void)
{
    HANDLE hf;
    WIN32_FIND_DATA fd = {0};
    int total = 0;

    hf = FindFirstFile("c:\\*", &fd);
    do{
        if(検索したのが対象となるファイルなら)
            total += getCount(fd.cFileName);
    }while(FindNextFile(hf, &fd));
    FindClose(hf);

    printf("総行数: %d\n", total);

    return 0;
}

Re:プロンプト

Posted: 2010年9月05日(日) 07:47
by やっくん
>へろりさん

おぉ・・・ありがとうございます!!
とりあえず、APIの詳細を一つ一つ覗いてきました。
確かにできそうですね。

Linuxの方は今は手元にないので後で、使える所に行って調べてみます。

Re:プロンプト

Posted: 2010年9月05日(日) 07:49
by やっくん
ソースコードまでわざわざ示していただきありがとうございます><
ちょっと、急いで組んでみます。

Re:プロンプト

Posted: 2010年9月05日(日) 08:11
by やっくん
おかげさまで無事に製作することができましたm(__)m
ありがとうございました。

Re:プロンプト

Posted: 2010年9月05日(日) 09:35
by バグ
環境が許すのであれば、.NETを利用すると楽に書けますよ。参考までに(^-^)

Re:プロンプト

Posted: 2010年9月05日(日) 10:09
by やっくん
バグさんありがとうございます。

.NETを触ったことはありませんが、最近ちょうど図書を借りたので調べてみます(^^