#include<stdio.h>
#include<io.h>
#include <windows.h>
//遍历dir目录下的所有文件和目录,隐藏的文件夹和文件也会被找到
//lpPath指定开始遍历的文件夹路径,可以是相对路径也可以是绝对路径
//depth指定遍历的深度,如果lpPath为"",则将程序当前所在的磁盘分区
//根目录作为初始搜索路径
static void traverseAllFilesOfFolder(char * lpPath, int depth)
{
char szFind[MAX_PATH], szFile[MAX_PATH], szFolder[MAX_PATH];
WIN32_FIND_DATA FindFileData;
HANDLE hFind;
int fileCount = 0;
int folderCount = 0;
int d = depth - 1;
strcpy(szFind, lpPath);
strcpy(szFolder, lpPath);
strcat(szFind, "\\*.*");
hFind = FindFirstFile(szFind, &FindFileData);
if (INVALID_HANDLE_VALUE == hFind)
{
fprintf(stderr, "路径%s不存在\n", szFolder);
return;
}
while (TRUE)
{
if (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) //文件夹
{
if (FindFileData.cFileName[0] != '.') //排除.和..文件
{
//printf("文件夹:%s\n", FindFileData.cFileName);
folderCount++;
//if (folderCount % 8 == 0) system("PAUSE");
strcpy(szFile, lpPath);
strcat(szFile, "\\");
strcat(szFile, FindFileData.cFileName);
if (d > 0)
{
traverseAllFilesOfFolder(szFile, d); //递归处理每个子文件夹
}
}
}
else
{
//printf("%s\n", FindFileData.cFileName); //文件
fileCount++;
//if (fileCount % 8 == 0) system("PAUSE");
}
if (!FindNextFile(hFind, &FindFileData))
break;
}
printf("文件夹%s下有%d个文件.\n", szFolder, fileCount);
printf("文件夹%s下有%d个文件夹.\n", szFolder, folderCount);
system("PAUSE");
}
int main(void)
{
//char filepath[MAX_PATH] = "f:\\";
//char filepath[MAX_PATH] = ".";
char filepath[MAX_PATH] = "./common";
//char filepath[MAX_PATH] = ".\\GPUProcessScheduling";
//char filepath[MAX_PATH] = "opencv_contrib-master";
//char filepath[MAX_PATH] = "opencv_contrib-master/modules/line_descriptor";
//char filepath[MAX_PATH] = "";
traverseAllFilesOfFolder(filepath, 3);
//system("PAUSE");
return 0;
}
windows下文件夹遍历
最新推荐文章于 2024-08-21 11:09:34 发布