win32下,遍历目录下的文件和子目录 【转】
版权声明:
本文为博主学习过程中整理发布,如有侵权请告知
更新时间:
2017-12-05 10:22:52
温馨提示:
学无止境,技术类文章有它的时效性,请留意文章更新时间,如发现内容有误请留言指出,防止别人"踩坑",我会及时更新文章
下面函数实现啦遍历当前目录下的文件和目录,如果想实现遍历包括子目录的所有文件,在判断出是目录的地方递归调用自己就可以啦。
下面函数只遍历当前目录的文件和目录
/* * sub_dir.c 遍历目录下的文件和子目录 */ #include <Windows.h> #include <stdio.h> /* * DWORD EnumerateFileInDirectory(LPSTR szPath) * 功能:遍历目录下的文件和子目录,将显示文件和文件夹隐藏、加密的属性 * * 参数:LPSTR szPath,为需遍历的路径 * * 返回值:0代表执行完成,1代表发送错误 */ DWORD EnumerateFileInDirectory(LPWSTR szPath) { WIN32_FIND_DATA FindFileData; HANDLE hListFile; WCHAR szFilePath[MAX_PATH]; // 构造代表子目录和文件夹路径的字符串,使用通配符"*" lstrcpy(szFilePath, szPath); // 注释的代码可以用于查找所有以“.txt”结尾的文件 // lstrcat(szFilePath, "\\*.txt"); lstrcat(szFilePath, L"\\*"); // 查找第一个文件/目录,获得查找句柄 hListFile = FindFirstFile(szFilePath, &FindFileData); // 判断句柄 if(hListFile == INVALID_HANDLE_VALUE) { printf("错误:%d\n", GetLastError()); return 1; } else { do { /* 如果不想显示代表本级目录和上级目录的“.”和“..”, 可以使用注释部分的代码过滤 if(lstrcmp(FindFileData.cFileName, TEXT(".")) == 0 || lstrcmp(FindFileData.cFileName, TEXT("..")) == 0) { continue; } */ // 打印文件名、目录名 printf("%ws\t\t", FindFileData.cFileName); // 判断文件属性,是否为加密文件或者文件夹 if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_ENCRYPTED) { printf("<加密> "); } // 判断文件属性,是否为隐藏文件或文件夹 if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN) { printf("<隐藏> "); } // 判断文件属性,是否为目录 if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { printf("<DIR> "); } // 读者可根据文件属性表中的内容自行添加、判断文件属性 printf("\n"); } while(FindNextFile(hListFile, &FindFileData)); } return 0; } /* * int main(int argc, PCHAR argv[]) * 功能:调用ListFileInDirectory遍历目录下的文件和子目录 * 参数:argv[1]为需要遍历的路径,如果为空,则获取当前路径 */ int main(int argc, PCHAR argv[]) { //if (argc == 2) //{ // EnumerateFileInDirectory(argv[1]); //} //else { WCHAR szCurrentPath[MAX_PATH]; GetCurrentDirectory(MAX_PATH, szCurrentPath); EnumerateFileInDirectory(szCurrentPath); } return 0; }
遍历结果