FindNextFile 蚊子132 给大家写一段通用的文件查找代码,非常简单明了

地址: FindNextFile 蚊子132 给大家写一段通用的文件查找代码

文件查找在编程工作中,是非常常见的,这里 蚊子132 给大家写一段通用的文件查找代码,非常简单明了。

FindNextFile 蚊子132 给大家写一段通用的文件查找代码,非常简单明了_第1张图片

2 分钟前 上传
下载附件 (14.2 KB)
一段通用的文件查找代码




一、在不使用mfc的程序中获得某个目录下的所有文件名称,包括子目录。把文件名称以一个固定的程度放入一个缓冲中,这个缓冲要足够的大,能容下所有的文件名称。
函数的输入为要查找的根目录,输出为存放所有文件名称的缓冲
算法:使用递归
二、代码:

  1. void FindFileInDir(char* rootDir, char* strRet)
  2. {
  3.     char fname[MAC_FILENAMELENOPATH];
  4.     ZeroMemory(fname, MAC_FILENAMELENOPATH);

  5.     WIN32_FIND_DATA fd;
  6.     ZeroMemory(&fd, sizeof(WIN32_FIND_DATA));

  7.     HANDLE hSearch;
  8.     char filePathName[256];
  9.     char tmpPath[256];
  10.     ZeroMemory(filePathName, 256);
  11.     ZeroMemory(tmpPath, 256);

  12.     strcpy(filePathName, rootDir);

  13.     BOOL bSearchFinished = FALSE;

  14.     if( filePathName[strlen(filePathName) -1] != '""' )
  15.     {
  16.        strcat(filePathName, """");
  17.     }

  18.     strcat(filePathName, "*");

  19.     hSearch = FindFirstFile(filePathName, &fd);

  20.     //Is directory
  21.     if( (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
  22.        && strcmp(fd.cFileName, ".") && strcmp(fd.cFileName, "..") )      
  23.     {
  24.        strcpy(tmpPath, rootDir);
  25.        strcat(tmpPath, fd.cFileName);
  26.        FindFileInDir(tmpPath, strRet);
  27.     }
  28.    
  29.     else   if( strcmp(fd.cFileName, ".") && strcmp(fd.cFileName, "..") )
  30.               {
  31.                   sprintf(fname, "%-50.50s", fd.cFileName);
  32.                   strcat(strRet + strRet[strlen(strRet)] , fname);
  33.               }

  34.     while( !bSearchFinished )
  35.     {
  36.        if( FindNextFile(hSearch, &fd) )
  37.        {
  38.            if( (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
  39.               && strcmp(fd.cFileName, ".") && strcmp(fd.cFileName, "..") )      
  40.            {
  41.               strcpy(tmpPath, rootDir);
  42.               strcat(tmpPath, fd.cFileName);
  43.               FindFileInDir(tmpPath, strRet);
  44.            }
  45.    
  46.            else   if( strcmp(fd.cFileName, ".") && strcmp(fd.cFileName, "..") )
  47.                      {
  48.                          sprintf(fname, "%-50.50s", fd.cFileName);
  49.                          strcat(strRet + strRet[strlen(strRet)] , fname);
  50.                      }
  51.        }
  52.        else
  53.        {
  54.            if( GetLastError() == ERROR_NO_MORE_FILES )          //Normal Finished
  55.            {
  56.               bSearchFinished = TRUE;
  57.            }
  58.            else
  59.               bSearchFinished = TRUE;     //Terminate Search
  60.        }
  61.     }

  62.     FindClose(hSearch);
  63.    
  64. }
复制代码


你可能感兴趣的:(编程,算法,Win32,递归,search)