在C语言中,遍历文件夹中的文件通常可以通过以下几种方法实现:
方法一:使用 `opendir()` 和 `readdir()`
```c
include include include int main() { DIR *dir; struct dirent *ent; char path[] = "path/to/directory"; // 替换为实际目录路径 // 打开目录 dir = opendir(path); if (dir == NULL) { perror("Unable to open directory"); return 1; } // 读取目录中的每个文件名 while ((ent = readdir(dir)) != NULL) { // 排除当前目录和上级目录 if (strcmp(ent->d_name, ".") != 0 && strcmp(ent->d_name, "..") != 0) { printf("%s\n", ent->d_name); } } // 关闭目录 closedir(dir); return 0; } ``` 方法二:使用 `_findfirst()` 和 `_findnext()` ```c include include void listFiles(const char *dir) { intptr_t handle; _finddata_t findData; char path; // 在要遍历的目录后加上通配符 sprintf(path, "%s\\*.*", dir); handle = _findfirst(path, &findData); if (handle == -1) { printf("Failed to find first file!\n"); return; } do { // 排除子目录和特殊目录 if (findData.attrib & _A_SUBDIR && strcmp(findData.name, ".") == 0 && strcmp(findData.name, "..") == 0) { continue; } // 打印文件名 printf("%s\n", findData.name); } while (_findnext(handle, &findData) != -1); _findclose(handle); } int main() { char dir; printf("Enter a directory: "); cin.getline(dir, 200); listFiles(dir); return 0; } ``` 方法三:使用递归遍历 ```c include include include void traverse(const char *dir) { DIR *dp; struct dirent *entry; char path; dp = opendir(dir); if (dp == NULL) { perror("Error opening directory"); return; } while ((entry = readdir(dp)) != NULL) { // 排除特殊目录 if (strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0) { continue; } // 拼接子目录路径 snprintf(path, sizeof(path), "%s/%s", dir, entry->d_name); // 如果是目录,则递归遍历 if (entry->d_type == DT_DIR) { traverse(path); } else { printf("%s\n", entry->d_name); } } closedir(dp); } int main() { char dir = "path/to/directory"; // 替换为实际目录路径 traverse(dir); return 0; } ``` 总结 以上是几种常见的遍历文件夹的方法,可以根据具体需求和平台选择合适的方法。Windows平台下可以使用`_findfirst()`和`_findnext()`,而在跨平台环境下,可以使用`opendir()`和`readdir()`。递归遍历方法可以方便地处理多级目录结构。