#################################################
利用C/C++编写程序以获取文件夹内所有子文件名,以下程序参考网络上诸多博文:
头文件如下:
- #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;
程序如下:
- <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环境:
- 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环境:
- 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.youkuaiyun.com/cscmaker/article/details/7042718
http://baike.baidu.com/item/getcwd
获取当前绝对路径getcwd():
windows环境下头文件:
- #include <direct.h>
linux环境下头文件:
- #include <unistd.h>