この記事では、C言語を使用してフォルダ内のファイルを検索する方法について詳しく説明します。
フォルダ内の全てのファイルを検索する方法や、特定の拡張子を持つファイルを検索する方法、さらにはファイル名やファイルの内容をキーワードで検索する方法など、様々な検索方法を見ていきましょう。
また、検索結果をさらに絞り込むためのフィルタリング方法についても解説しています。
ファイルの検索方法
フォルダ内の全てのファイルを検索する方法
まず、フォルダ内の全てのファイルを検索する方法を見ていきましょう。
以下のサンプルコードは、指定したフォルダ内の全てのファイルを表示する方法を示しています。
#include <stdio.h>
#include <dirent.h>
int main() {
DIR *dir;
struct dirent *entry;
// 検索するフォルダのパスを指定
char *folderPath = "/path/to/folder";
// フォルダを開く
dir = opendir(folderPath);
if (dir == NULL) {
printf("フォルダを開けませんでした。\n");
return 1;
}
// フォルダ内の全てのファイルを表示
while ((entry = readdir(dir)) != NULL) {
printf("%s\n", entry->d_name);
}
// フォルダを閉じる
closedir(dir);
return 0;
}
上記のコードでは、opendir関数
を使用して指定したフォルダを開き、readdir関数
を使用してフォルダ内のファイルを一つずつ取得しています。
取得したファイル名は、d_name
メンバーを通じてアクセスできます。
特定の拡張子を持つファイルを検索する方法
次に、特定の拡張子を持つファイルを検索する方法を見ていきましょう。
以下のサンプルコードは、指定したフォルダ内の特定の拡張子を持つファイルを表示する方法を示しています。
#include <stdio.h>
#include <dirent.h>
#include <string.h>
int main() {
DIR *dir;
struct dirent *entry;
// 検索するフォルダのパスを指定
char *folderPath = "/path/to/folder";
// 検索する拡張子を指定
char *extension = ".txt";
// フォルダを開く
dir = opendir(folderPath);
if (dir == NULL) {
printf("フォルダを開けませんでした。\n");
return 1;
}
// フォルダ内の特定の拡張子を持つファイルを表示
while ((entry = readdir(dir)) != NULL) {
// ファイル名の拡張子を取得
char *fileExtension = strrchr(entry->d_name, '.');
// 拡張子が一致する場合に表示
if (fileExtension != NULL && strcmp(fileExtension, extension) == 0) {
printf("%s\n", entry->d_name);
}
}
// フォルダを閉じる
closedir(dir);
return 0;
}
上記のコードでは、strrchr関数
を使用してファイル名の拡張子を取得し、strcmp関数
を使用して指定した拡張子と一致するかどうかを判定しています。
ファイル名やファイルの内容をキーワードで検索する方法
最後に、ファイル名やファイルの内容をキーワードで検索する方法を見ていきましょう。
以下のサンプルコードは、指定したフォルダ内のファイル名やファイルの内容にキーワードが含まれる場合に表示する方法を示しています。
#include <stdio.h>
#include <dirent.h>
#include <string.h>
int main() {
DIR *dir;
struct dirent *entry;
// 検索するフォルダのパスを指定
char *folderPath = "/path/to/folder";
// 検索するキーワードを指定
char *keyword = "example";
// フォルダを開く
dir = opendir(folderPath);
if (dir == NULL) {
printf("フォルダを開けませんでした。\n");
return 1;
}
// フォルダ内のファイルを検索
while ((entry = readdir(dir)) != NULL) {
// ファイル名にキーワードが含まれる場合に表示
if (strstr(entry->d_name, keyword) != NULL) {
printf("%s\n", entry->d_name);
continue;
}
// ファイルを開く
FILE *file = fopen(entry->d_name, "r");
if (file == NULL) {
continue;
}
// ファイルの内容にキーワードが含まれる場合に表示
char line[256];
while (fgets(line, sizeof(line), file) != NULL) {
if (strstr(line, keyword) != NULL) {
printf("%s\n", entry->d_name);
break;
}
}
// ファイルを閉じる
fclose(file);
}
// フォルダを閉じる
closedir(dir);
return 0;
}
上記のコードでは、strstr関数
を使用してファイル名やファイルの内容にキーワードが含まれるかどうかを判定しています。
以上が、C言語を使用してフォルダ内のファイルを検索する基本的な方法です。
これらの方法を活用して、自分のプログラムにファイル検索機能を追加してみてください。