C言語 - サブディレクトリとファイルを一覧表示する
C言語 - サブディレクトリとファイルを一覧表示する
C言語でディレクトリを扱ってみる。
以下のプログラムは、カレントディレクトリのサブディレクトリとファイルを一覧表示する。
#include
#include
int main(int argc, char *argv[]) {
char *path = ".";
DIR *dirp = opendir(path);
if ( dirp == (DIR*)NULL ) {
perror("opendir err");
return 1;
}
struct dirent *entry;
while ( (entry = readdir(dirp)) != (struct dirent *)NULL ) {
/* カレントディレクトリ、親ディレクトリは除く */
if ( (strlen(entry->d_name) == 1 && strcmp(entry->d_name, ".") == 0) ||
(strlen(entry->d_name) == 2 && strcmp(entry->d_name, "..") == 0) ) {
continue;
}
printf("%s\n", entry->d_name);
}
if ( closedir(dirp) != 0 ) {
perror("closedir err");
return 1;
}
return 0;
}
プログラムのポイントは以下のとおり。
- dirent.h ファイルをインクルードする。
opendir
関数でディレクトリをオープンする。readdir
関数でディレクトリエントリ(ディレクトリやファイルの情報のこと)を取得する。closedir
関数でディレクトリをクローズする。
ディレクトリのオープン
opendir
関数は指定したディレクトリをオープンして、readdir
関数で読み取れるようにする。
正常終了した場合は DIR オブジェクトのポインターを返す。
それ以外の場合は NULL ポインターを返す。
DIR *dirp = opendir(path);
if ( dirp == (DIR*)NULL ) {
perror("opendir err");
return 1;
}
ディレクトリエントリの取得
readdir
関数でディレクトリエントリを読み取る。
正常終了した場合は dirent 構造体へのポインターを返す。
読み取れるディレクトリエントリがなくなった場合、または正常終了しなかった場合は NULL ポインターを返す。
struct dirent *entry;
while ( (entry = readdir(dirp)) != (struct dirent *)NULL ) {
/* ~~~ディレクトリエントリを使った処理を書く~~~ */
}
ファイル名(ディレクトリ名)は dirent 構造体の d_name
に入っている。
printf("%s\n", entry->d_name);
ディレクトリのクローズ
closedir
関数でディレクトリをクローズする。
正常終了した場合は 0 を、それ以外の場合は -1 を返す。
if ( closedir(dirp) != 0 ) {
perror("closedir err");
return 1;
}
なお、こちらで書いた方法は Visual C++ では使えない。
Visual C++ には dirent.h ファイルがないからだ。
アカウントを作成 して、もっと沢山の記事を読みませんか?
この記事が気に入ったら ことりと さんを応援しませんか?
メッセージを添えてチップを送ることができます。
この記事にコメントをしてみませんか?