#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 发布