c++遍历文件夹,获取文件夹下所有文件名

时间:2022-04-14 12:24:18
[cpp]  view plain  copy
  1. // dirlist.cpp : 定义控制台应用程序的入口点。  
  2.   
  3. #include "stdafx.h"  
  4. #include <string>  
  5. #include <io.h>  
  6. #include <vector>  
  7. #include <iostream>  
  8.   
  9. using namespace std;  
  10.   
  11. /************************************************************************/  
  12. /*  获取文件夹下所有文件名 
  13. 输入: 
  14. path    :   文件夹路径 
  15. exd     :   所要获取的文件名后缀,如jpg、png等;如果希望获取所有 
  16. 文件名, exd = ""或"*" 
  17. 输出: 
  18. files   :   获取的文件名列表 
  19.  
  20. shao, 20140707 
  21. */  
  22. /************************************************************************/  
  23. void getFiles(string path, string exd, vector<string>& files)  
  24. {  
  25.     //cout << "getFiles()" << path<< endl;   
  26.     //文件句柄  
  27.     long   hFile = 0;  
  28.     //文件信息  
  29.     struct _finddata_t fileinfo;  
  30.     string pathName, exdName;  
  31.   
  32.     if (0 != strcmp(exd.c_str(), ""))  
  33.     {  
  34.         exdName = "\\*." + exd;  
  35.     }  
  36.     else  
  37.     {  
  38.         exdName = "\\*";  
  39.     }  
  40.   
  41.     if ((hFile = _findfirst(pathName.assign(path).append(exdName).c_str(), &fileinfo)) != -1)  
  42.     {  
  43.         do  
  44.         {  
  45.             //cout << fileinfo.name << endl;   
  46.   
  47.             //如果是文件夹中仍有文件夹,迭代之  
  48.             //如果不是,加入列表  
  49.             if ((fileinfo.attrib &  _A_SUBDIR))  
  50.             {  
  51.                 if (strcmp(fileinfo.name, ".") != 0 && strcmp(fileinfo.name, "..") != 0)  
  52.                     getFiles(pathName.assign(path).append("\\").append(fileinfo.name), exd, files);  
  53.             }  
  54.             else  
  55.             {  
  56.                 if (strcmp(fileinfo.name, ".") != 0 && strcmp(fileinfo.name, "..") != 0)  
  57.                     files.push_back(pathName.assign(path).append("\\").append(fileinfo.name));  
  58.             }  
  59.         } while (_findnext(hFile, &fileinfo) == 0);  
  60.         _findclose(hFile);  
  61.     }  
  62. }  
  63.   
  64. void main()  
  65. {  
  66.     cout << "start list" << endl;  
  67.     vector<string> files;  
  68.     char * filePath = "D:\\SeetaFaceEngine-master";  
  69.   
  70.     //获取该路径下的所有jpg文件  
  71.     //getFiles(filePath, "jpg", files);  
  72.   
  73.     //获取该路径下的所有文件  
  74.     getFiles(filePath, "*", files);  
  75.   
  76.     //列表文件输出路径  
  77.     FILE* fp;  
  78.     fopen_s(&fp, "d:\\dir_list.txt""w");  
  79.   
  80.     int size = files.size();  
  81.     for (int i = 0; i < size; i++)  
  82.     {  
  83.         cout << files[i] << endl;  
  84.       
  85.         fputs(files[i].c_str(), fp);  
  86.         fputs("\n", fp);   
  87.       
  88.     }  
  89.     fclose(fp);  
  90.        
  91.     cout << "end list" << endl;  
  92.     getchar();  
  93.   
  94. }