C/C++获取文件夹下所有文件

来源:互联网 发布:淘宝刷手拿钱跑 编辑:程序博客网 时间:2024/06/16 01:35
#include <iostream>  #include <stdlib.h>  #include <stdio.h>  #include <vector>#include <string>#include <algorithm>#ifdef linux  #include <unistd.h>  #include <dirent.h>  #endif  #ifdef WIN32  #include <direct.h>  #include <io.h>  #endif  using namespace std;vector<string> getFiles(string cate_dir){vector<string> files;//存放文件名  #ifdef WIN32  _finddata_t file;long lf;//输入文件夹路径  if ((lf = _findfirst(cate_dir.c_str(), &file)) == -1) {cout << cate_dir << " not found!!!" << endl;}else {while (_findnext(lf, &file) == 0) {if (strcmp(file.name, ".") == 0 || strcmp(file.name, "..") == 0)continue;files.push_back(file.name);}}_findclose(lf);#endif  #ifdef linux  DIR *dir;struct dirent *ptr;char base[1000];if ((dir = opendir(cate_dir.c_str())) == NULL){perror("Open dir error...");exit(1);}while ((ptr = readdir(dir)) != NULL){if (strcmp(ptr->d_name, ".") == 0 || strcmp(ptr->d_name, "..") == 0)    ///current dir OR parrent dir  continue;else if (ptr->d_type == 8)    ///file    //printf("d_name:%s/%s\n",basePath,ptr->d_name);  files.push_back(ptr->d_name);else if (ptr->d_type == 10)    ///link file     //printf("d_name:%s/%s\n",basePath,ptr->d_name);  continue;else if (ptr->d_type == 4)    ///dir  {files.push_back(ptr->d_name);/*memset(base,'\0',sizeof(base));strcpy(base,basePath);strcat(base,"/");strcat(base,ptr->d_nSame);readFileList(base);*/}}closedir(dir);#endif  //排序,按从小到大排序  sort(files.begin(), files.end());return files;}#ifdef WIN32int main(void){char current_address[100];memset(current_address, 0, 100);getcwd(current_address, 100); //获取当前路径  cout << current_address << endl;strcat(current_address, "\\*");vector<string> files = getFiles((string)current_address);for (int i = 0; i < files.size(); i++){cout << files[i] << endl;}cin.get();return 0;}#elif linuxint main(void){DIR *dir;char basePath[100];///get the current absoulte path  memset(basePath, '\0', sizeof(basePath));getcwd(basePath, 999);printf("the current dir is : %s\n", basePath);cout << endl << endl;vector<string> files = getFiles(basePath);for (int i = 0; i < files.size(); i++){cout << files[i] << endl;}cout << "end..." << endl << endl;return 0;}#endif // WIN32

0 0