C 言語でフォルダを反復処理する方法
C言語では、システム提供のディレクトリ操作関数を使用することで、フォルダを走査することができます。以下に一般的な方法を記載します。
`opendir()` 関数で走査するディレクトリを開き、ディレクトリへのポインタを返します。
2. ディレクトリ内の各エントリは `readdir()` 関数を使って読み取ることができ、`dirent` 構造体ポインタを返します。
読み込まれた各エントリをチェックし、ディレクトリの場合は自身の関数を再帰的に呼び出してディレクトリ内の内容を処理します。
ファイルの場合には、ファイル名のプリントやファイルのコピーなど、必要な処理を行います。
5. `closedir()`関数でディレクトリを閉じる。
簡単なコードの例で、フォルダーをひとつずつ処理して、すべてのファイルとその中のサブフォルダーの名前を表示します。
#include
#include
void traverseDirectory(char* path) {
DIR* dir;
struct dirent* entry;
// 打开目录
dir = opendir(path);
if (dir == NULL) {
perror("无法打开目录");
return;
}
// 读取目录中的每个条目
while ((entry = readdir(dir)) != NULL) {
// 跳过当前目录(.)和上级目录(..)
if (strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0) {
continue;
}
// 构建完整路径
char filePath[256];
snprintf(filePath, sizeof(filePath), "%s/%s", path, entry->d_name);
// 判断条目类型
if (entry->d_type == DT_DIR) {
printf("文件夹:%s\n", filePath);
// 递归调用自身处理子文件夹
traverseDirectory(filePath);
} else if (entry->d_type == DT_REG) {
printf("文件:%s\n", filePath);
}
}
// 关闭目录
closedir(dir);
}
int main() {
char* path = "."; // 要遍历的目录路径
traverseDirectory(path);
return 0;
}
上に示した例のコードは、カレントディレクトリから探索を始めて、すべてのファイルとフォルダ名を出力します。必要に応じてパスや処理方法を変更することができます。