使用FindFirstFile和FindNextFile查找某个目录下的所有文件(包括子目录) |
来源:网络收集 整理日期:08月25日 19:38 学新网:studynew.com |
一、在不使用mfc的程序中获得某个目录下的所有文件名称,包括子目录。把文件名称以一个固定的程度放入一个缓冲中,这个缓冲要足够的大,能容下所有的文件名称。 函数的输入为要查找的根目录,输出为存放所有文件名称的缓冲 算法:使用递归 void FindFileInDir(char* rootDir, char* strRet) { char fname[MAC_FILENAMELENOPATH]; ZeroMemory(fname, MAC_FILENAMELENOPATH);
WIN32_FIND_DATA fd; ZeroMemory(&fd, sizeof(WIN32_FIND_DATA));
HANDLE hSearch; char filePathName[256]; char tmpPath[256]; ZeroMemory(filePathName, 256); ZeroMemory(tmpPath, 256);
strcpy(filePathName, rootDir);
BOOL bSearchFinished = FALSE;
if( filePathName[strlen(filePathName) -1] != // ) { strcat(filePathName, //); }
strcat(filePathName, *);
hSearch = FindFirstFile(filePathName, &fd);
//Is directory if( (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) && strcmp(fd.cFileName, .) && strcmp(fd.cFileName, ..) ) { strcpy(tmpPath, rootDir); strcat(tmpPath, fd.cFileName); FindFileInDir(tmpPath, strRet); }
else if( strcmp(fd.cFileName, .) && strcmp(fd.cFileName, ..) ) { sprintf(fname, %-50.50s, fd.cFileName); strcat(strRet + strRet[strlen(strRet)] , fname); }
while( !bSearchFinished ) { if( FindNextFile(hSearch, &fd) ) { if( (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) && strcmp(fd.cFileName, .) && strcmp(fd.cFileName, ..) ) { strcpy(tmpPath, rootDir); strcat(tmpPath, fd.cFileName); FindFileInDir(tmpPath, strRet); }
else if( strcmp(fd.cFileName, .) && strcmp(fd.cFileName, ..) ) { sprintf(fname, %-50.50s, fd.cFileName); strcat(strRet + strRet[strlen(strRet)] , fname); } } else { if( GetLastError() == ERROR_NO_MORE_FILES ) //Normal Finished { bSearchFinished = TRUE; } else bSearchFinished = TRUE; //Terminate Search } }
FindClose(hSearch); } |