地址: FindNextFile 蚊子132 给大家写一段通用的文件查找代码
文件查找在编程工作中,是非常常见的,这里 蚊子132 给大家写一段通用的文件查找代码,非常简单明了。
一、在不使用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);
-
- }