利用windows.h头文件遍历目录

  1. #include<windows.h>    
  2. #include<iostream>    
  3. #include<string>    
  4. using namespace std;    
  5.     
  6. //只能处理目录:lpPath只能是路径    
  7. void find(char *lpPath)    
  8. {    
  9.     char szFind[MAX_PATH];    
  10.    char szFile[MAX_PATH];    
  11.     
  12.     WIN32_FIND_DATA FindFileData;    
  13.     
  14.     strcpy(szFind,lpPath);    
  15.     strcat(szFind,"//*.*");    
  16.     
  17.     HANDLE hFind=::FindFirstFile(szFind,&FindFileData);    
  18.     if(INVALID_HANDLE_VALUE == hFind)    return;    
  19.     while(TRUE)    
  20.     {    
  21.         if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)    
  22.         {    
  23.             if(FindFileData.cFileName[0]!='.')    
  24.             {    
  25.                 strcpy(szFile,lpPath);    
  26.                 strcat(szFile,"//");    
  27.                 strcat(szFile,FindFileData.cFileName);    
  28.                 find(szFile);    
  29.             }    
  30.         }    
  31.         else    
  32.         {          
  33.                cout<<FindFileData.cFileName<<endl;    
  34.         }    
  35.         if(!FindNextFile(hFind,&FindFileData))    
  36.             break;    
  37.     }    
  38.     FindClose(hFind);     
  39. }    
  40. //可同时处理目录和文件:path可以是路径,也可以是文件名,或者文件通配符    
  41. void _find(string path){     
  42.      //取路径名最后一个"//"之前的部分,包括"//"    
  43.     string prefix=path.substr(0,path.find_last_of('//')+1);    
  44.     
  45.     WIN32_FIND_DATA FindFileData;    
  46.     HANDLE hFind=::FindFirstFile(path.c_str(), &FindFileData);    
  47.     if(INVALID_HANDLE_VALUE == hFind)    
  48.     {    
  49.        cout<<"文件通配符错误"<<endl;    
  50.       return;    
  51.    }    
  52.     while(TRUE)    
  53.     {    
  54.       //目录    
  55.         if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)    
  56.         {    
  57.             //不是当前目录,也不是父目录    
  58.             if(FindFileData.cFileName[0]!='.')    
  59.             {    
  60.                 //查找下一级目录    
  61.                 _find(prefix+FindFileData.cFileName+"//"+"*.*");    
  62.             }    
  63.         }    
  64.         //文件    
  65.         else    
  66.         {       
  67.              cout<<FindFileData.cFileName<<endl;    
  68.         }    
  69.         if(!FindNextFile(hFind,&FindFileData))    
  70.               break;    
  71.     }    
  72.     FindClose(hFind);     
  73. }    
  74.     
  75. void main(){    
  76.     //find("E:");//目录:E盘    
  77.     //_find("E://*.*");//E盘下所有文件    
  78.     
  79.     string str="./test"//这里指定的是目录    
  80.     
  81.     //string path;    
  82.     //cout<<"请输入文件通配符:"<<flush;    
  83.     //cin>>path;    
  84.     // str=str+path;    
  85.     find((char*)str.c_str());//可以处理".",".." 不可以处理"*","..//*"     
  86.     //_find(str);//可以处理"*","..//*" 不可以处理".",".."    
  87.     system("pause");    
  88. }    
  89. 复制代码    
  90.     
  91. 其中有个结构体,它是C++自带的,是这样的:    
  92.      
  93. typedef struct _WIN32_FIND_DATA{    
  94.     
  95.    DWORD dwFileAttributes; // 文件属性    
  96.    FILETIME ftCreationTime; // 文件创建时间    
  97.    FILETIME ftLastAccessTime; // 文件最后一次访问时间    
  98.    FILETIME ftLastWriteTime; // 文件最后一次修改时间    
  99.    DWORD nFileSizeHigh; // 文件长度高 32 位    
  100.    DWORD nFileSizeLow; // 文件长度低 32 位    
  101.    DWORD dwReserved0; // 系统保留    
  102.    DWORD dwReserved1; // 系统保留    
  103.    TCHAR cFileName[ MAX_PATH ]; // 长文件名    
  104.    TCHAR cAlternateFileName[ 14 ]; // 文件的可选名    
  105.     
  106. } WIN32_FIND_DATA;    
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值