#include <windows.h> /************************************************/ *参数说明: char *pszDestPath为需要遍历的目标路径 /************************************************/ EnmuDirectory(char *pszDestPath) { //此结构说明参MSDN WIN32_FIND_DATA FindFileData; //查找文件的句柄 HANDLE hListFile; //绝对路径,例:c:\windows\system32\cmd.exe char szFullPath[MAX_PATH]; //相对路径 char szFilePath[MAX_PATH]; //构造相对路径 wsprintf(szFilePath, "%s\\*", pszDestPath); //查找第一个文件,获得查找句柄,如果FindFirstFile返回INVALID_HANDLE_VALUE则返回 if((hListFile = FindFirstFile(szFilePath, &FindFileData)) == INVALID_HANDLE_VALUE) { //查找文件错误 return 1; } else { do { //过滤.和.. //“.”代表本级目录“..”代表父级目录 if( lstrcmp(FindFileData.cFileName, TEXT(".")) == 0 || lstrcmp(FindFileData.cFileName, TEXT("..")) == 0 ) { continue; } //构造全路径 wsprintf(szFullPath, "%s\\%s", pszDestPath, FindFileData.cFileName); //读取文件属性,如果不是文件夹 if(!(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) { //这里你可以自己添加分析是某种类型文件的代码。可以根据 //扩展名分析。 //这里有个实例,你可以看看 //有必要初始化一下 char *pszFileType = NULL; //把pszFileType指向cFileName的倒数第三个数符。因为一般扩展名长为3个字符。 //当然,你也可以用其它方法分析扩展名。或倒序查“.” pszFileType = &(FindFileData.cFileName[strlen(FindFileData.cFileName) - 3]); //如果是jpg结尾的文件 if(!stricmp(pszFileType, "jpg")) { FILE *fp; //或许这里打开C:\\data.txt不应该用"w+",你可试着来 fp = fopen("c:\\data.txt", "w+"); if(fp) fputs(szFullPath, fp); fclose(fp); } } //如果是文件夹,则递归调用EnmuDirectory函数 if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { EnmuDirectory(szFullPath); } //循环,查找下一个文件 }while(FindNextFile(hListFile, &FindFileData)); } //关闭句柄 FindClose(hListFile); //清空结构。可有可无的一句代码。函数退出会自动清空。 ZeroMemory(&FindFileData, sizeof(FindFileData)); return 0; }
如何c语言遍历文件夹
最新推荐文章于 2023-04-17 23:31:31 发布