天天看点

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

[cpp]  view plain  copy

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

继续阅读