C++/c遍历文件夹下所有文件函数代码遍历迭代目录实现分享
在C语言中,要遍历文件夹下的所有文件,你可以使用以下方法:
方法一:使用标准库函数
步骤:
- 包含头文件
<dirent.h>
和<stdio.h>
。 - 打开目标文件夹,使用
opendir()
函数。该函数返回一个指向DIR
结构的指针。 - 使用
readdir()
函数循环读取文件夹中的条目。 - 对于每个读取到的条目,检查其类型,如果是文件,可以进行相应的操作,比如打印文件名。
- 继续循环,直到
readdir()
返回空指针,表示已经读取完所有条目。 - 使用
closedir()
函数关闭文件夹。
示例代码如下:
#include <dirent.h>
#include <stdio.h>
void traverseDirectory(const char* path) {
DIR* directory = opendir(path);
if (directory == NULL) {
printf("Failed to open directory: %s\n", path);
return;
}
struct dirent* entry;
while ((entry = readdir(directory)) != NULL) {
if (entry->d_type == DT_REG) { // 判断是否是普通文件
printf("File: %s\n", entry->d_name);
// 在这里可以对文件进行操作,比如读取内容等
}
}
closedir(directory);
}
int main() {
const char* path = "/path/to/directory"; // 替换为你的目标文件夹路径
traverseDirectory(path);
return 0;
}
方法二:使用递归函数
步骤:
- 包含头文件
<dirent.h>
和<stdio.h>
。 - 定义一个递归函数,接收一个文件夹路径作为参数。
- 在递归函数中,打开目标文件夹,使用
opendir()
函数。该函数返回一个指向DIR
结构的指针。 - 使用
readdir()
函数循环读取文件夹中的条目。 - 对于每个读取到的条目,检查其类型,如果是文件夹,则递归调用该函数,传入当前文件夹的路径。
- 如果是文件,可以进行相应的操作,比如打印文件名。
- 继续循环,直到
readdir()
返回空指针,表示已经读取完所有条目。 - 使用
closedir()
函数关闭文件夹。
示例代码如下:
#include <dirent.h>
#include <stdio.h>
#include <string.h>
void traverseDirectory(const char* path) {
DIR* directory = opendir(path);
if (directory == NULL) {
printf("Failed to open directory: %s\n", path);
return;
}
struct dirent* entry;
while ((entry = readdir(directory)) != 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) { // 判断是否是文件夹
traverseDirectory(filepath); // 递归遍历子文件夹
} else if (entry->d_type == DT_REG) { // 判断是否是普通文件
printf("File: %s\n", entry->d_name);
// 在这里可以对文件进行操作,比如读取内容等
}
}
closedir(directory);
}
int main() {
const char* path = "/path/to/directory"; // 替换为你的目标文件夹路径
traverseDirectory(path);
return 0;
}
以上两种方法都可以实现遍历文件夹下的所有文件。方法一使用了标准库函数,较为简单直接;方法二使用递归函数,可以递归地遍历多层文件夹,更加灵活。你可以根据实际需求选择合适的方法。记得将代码中的/path/to/directory
替换为你要遍历的目标文件夹的路径。