打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
在Windows下,如何遍历某目录里所有文件?

         最近,在做毕业设计时,遇到遍历目录下所有文件的问题。具体情境是这样的:通过读取配置文件,获得需要访问的目录路径,该目录包含N层子目录和M个文件。然后需要遍历每个文件。对该问题的文件目录操作,Windows API提供了两个相关函数,FindFirstFileFindNextFile,使用它们写一个递归函数,就可以很好的解决这个问题了。代码如下:

  1. void processAllDir( const char *path ) {  
  2.     WIN32_FIND_DATA FindFileData;           //该结构用来保存文件目录信息  
  3.     HANDLE hFind;                   //保存文件查找的句柄  
  4.     char path_search[MAX_PATH];         //存储查找目录路径  
  5.   
  6.     hFind = FindFirstFile( path, &FindFileData );   //查找path目录里的第一个文件,并把结果保存在FindFileData结构体里  
  7.     if( hFind == INVALID_HANDLE_VALUE )     //判断查找是否成功  
  8.         return;  
  9.     if( FindFileData.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY ) {   //判断是否为目录  
  10.         if( FindFileData.cFileName[0] != '.' ) {            //判断是否为“.”和“..”目录  
  11.             strcpy( path_search, path );                //不是的话,把当前查找目录,copy到path_search  
  12.             path_search[strlen(path_search)-1] = '\0';      //path形式为“D:\a\*”,此处去掉"*"  
  13.             strcat( path_search, FindFileData.cFileName );          //连接当前查找到的目录名  
  14.             strcat( path_search, "\\\*");               //处理为“D:\a\b\*”的形式  
  15.             processAllDir( path_search );               //递归调用,进入下一级目录  
  16.             _chdir( path );                     //递归处理完,返回上一级目录  
  17.         }  
  18.     }  
  19.     else {                                  //如果不是目录,直接进行处理  
  20.         strcpy( path_search, path );  
  21.         path_search[strlen(path_search)-1] = '\0';  
  22.         strcat( path_search, FindFileData.cFileName );  
  23.         process( path_search );             //调用处理函数  
  24.     }  
  25.   
  26.     while( FindNextFile( hFind, &FindFileData) ) {              //继续处理下一个目录或文件  
  27.         if( FindFileData.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY ) {  
  28.             if( FindFileData.cFileName[0] != '.' ) {  
  29.                 strcpy( path_search, path );  
  30.                 path_search[strlen(path_search)-1] = '\0';  
  31.                 strcat( path_search, FindFileData.cFileName );  
  32.                 strcat( path_search, "\\\*");  
  33.                 processAllDir( path_search );  
  34.                 _chdir( path );  
  35.             }  
  36.         }  
  37.         else {  
  38.             strcpy( path_search, path );  
  39.             path_search[strlen(path_search)-1] = '\0';  
  40.             strcat( path_search, FindFileData.cFileName );  
  41.             process( path_search );  
  42.         }  
  43.     }  
  44.     FindClose( hFind );             //关闭文件查找句柄  
  45. }  
         几个值得注意的问题是:

        1、windows路径使用 “\” 分割,在C/C++里,是转义字符的意思,所以得用 "\\" 表示 '\' ;

        2、另外,msdn里有说到,查找目录“C:\abc”里的文件应该用"C:\abc\*"的形式。

        3、网上有用 _chdir( FindFileData.cFileName ) 设置工作目录,这样的方式,实际上使用的是当前工作目录。如果遍历的不是当前工作目录,那会南辕北辙。所以,使用

  1. strcpy( path_search, path );  
  2. path_search[strlen(path_search)-1] = '\0';  
  3. strcat( path_search, FindFileData.cFileName );  
  4. strcat( path_search, "\\\*");  
来自己拼装下次遍历的目录。


本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
VC C++ 遍历指定目录 Windows API
VC 遍历指定目录下的文件
使用FindFirstFile,FindNextFile遍历一个文件夹
两种方法使用VC遍历文件夹下所有文件和文件夹
FindFirstFile的正确用法
递归遍历某一路径下的所有文件(for windows or linux)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服