windows下C++11遍历目录文件
时间: 2023-11-16 22:04:11 浏览: 137
以下是使用C语言在Windows下遍历目录文件的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
void traverse_dir(const char *path);
int main(int argc, char *argv[])
{
if (argc != 2) {
printf("Usage: %s <dir_path>\n", argv[0]);
return 1;
}
traverse_dir(argv[1]);
return 0;
}
void traverse_dir(const char *path)
{
char search_path[MAX_PATH];
WIN32_FIND_DATA file_data;
sprintf(search_path, "%s\\*", path);
HANDLE handle = FindFirstFile(search_path, &file_data);
if (handle == INVALID_HANDLE_VALUE) {
printf("Failed to open directory: %s\n", path);
return;
}
do {
if (strcmp(file_data.cFileName, ".") == 0 ||
strcmp(file_data.cFileName, "..") == 0) {
continue;
}
if (file_data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
// 子目录
char sub_path[MAX_PATH];
sprintf(sub_path, "%s\\%s", path, file_data.cFileName);
traverse_dir(sub_path);
} else {
// 文件
char file_path[MAX_PATH];
sprintf(file_path, "%s\\%s", path, file_data.cFileName);
printf("%s\n", file_path);
}
} while (FindNextFile(handle, &file_data));
FindClose(handle);
}
```
在此代码中,我们使用了Windows API中的`FindFirstFile`和`FindNextFile`函数来遍历目录文件。具体实现步骤如下:
1. 将指定目录的路径拼接成搜索路径,例如`C:\test\*`。
2. 调用`FindFirstFile`函数来打开目录并获取第一个文件或目录的信息。
3. 如果打开目录失败,则退出遍历函数。
4. 如果当前文件或目录是`.`或`..`,则跳过。
5. 如果当前文件或目录是目录,则递归调用遍历函数。
6. 如果当前文件或目录是文件,则打印文件路径。
7. 调用`FindNextFile`函数获取下一个文件或目录的信息,重复步骤4-6,直到遍历完整个目录。
8. 调用`FindClose`函数关闭目录句柄。
需要注意的是,我们在拼接子目录路径和文件路径时,使用了`sprintf`函数。为了避免缓冲区溢出,我们将缓冲区大小定义为`MAX_PATH`,这是一个Windows API中的常量,表示文件路径的最大长度。