プロンプト

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
やっくん

プロンプト

#1

投稿記事 by やっくん » 15年前

おはようございます。

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

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

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

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

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

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

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

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

へろりくしょん

Re:プロンプト

#2

投稿記事 by へろりくしょん » 15年前

C言語の標準関数にそういった機能を持つ関数は無かったはずです。 多分。

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

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

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

へろりくしょん

Re:プロンプト

#3

投稿記事 by へろりくしょん » 15年前

こんな感じですか。
#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:プロンプト

#4

投稿記事 by やっくん » 15年前

>へろりさん

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

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

やっくん

Re:プロンプト

#5

投稿記事 by やっくん » 15年前

ソースコードまでわざわざ示していただきありがとうございます><
ちょっと、急いで組んでみます。

やっくん

Re:プロンプト

#6

投稿記事 by やっくん » 15年前

おかげさまで無事に製作することができましたm(__)m
ありがとうございました。

バグ

Re:プロンプト

#7

投稿記事 by バグ » 15年前

環境が許すのであれば、.NETを利用すると楽に書けますよ。参考までに(^-^)

やっくん

Re:プロンプト

#8

投稿記事 by やっくん » 15年前

バグさんありがとうございます。

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

閉鎖

“C言語何でも質問掲示板” へ戻る