C/C++编写程序以获取文件夹内所有子文件名

来源:互联网 发布:淘宝袜子利润 编辑:程序博客网 时间:2024/06/01 11:06

参考:

http://www.cnblogs.com/xudong-bupt/p/3504442.html

#

利用C/C++编写程序以获取文件夹内所有子文件名,以下程序参考网络上诸多博文:

头文件如下:

[cpp] view plain copy

#include <iostream>  #include <stdlib.h>  #include <stdio.h>  #include <string.h>  #ifdef linux  #include <unistd.h>  #include <dirent.h>  #endif  #ifdef WIN32  #include <direct.h>  #include <io.h>  #endif  using namespace std;  

程序如下:

[cpp] view plain copy

<pre name="code" class="cpp">/**  * @function: 获取cate_dir目录下的所有文件名  * @param: cate_dir - string类型  * @result:vector<string>类型 */  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) {              //输出文件名              //cout<<file.name<<endl;              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;  }  

windows环境下需要加上cate_dir+”\*”

实现:获取当前目录下的文件名:

windows环境:

[cpp] view plain copy

int 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;      }      //cout<<"Hello World"<<endl;      cout<<"end..."<<endl;      cin.get();      return 0;  }  

linux环境:

[cpp] view plain copy

int 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;  }  
#

参考:

http://blog.csdn.net/cscmaker/article/details/7042718

http://baike.baidu.com/item/getcwd

获取当前绝对路径getcwd():

windows环境下头文件:

[cpp] view plain copy

#include <direct.h>  

linux环境下头文件:

[cpp] view plain copy

#include <unistd.h>  
阅读全文
0 0
原创粉丝点击