#include <sys/types.h>
#include <sys/stat.h>
#include <iostream>
#include <unistd.h>
#include <dirent.h>
#include <cstddef>
#include <string>
#include <vector>
#include <cstring>
void getFiles(std::string path, std::vector<std::string> &files);
int main(int argc, char **argv)
{
using namespace std;
string path = "/root/git/Cplusplus/test/";
vector<string> vec;
getFiles(path, vec);
for(auto &s : vec)
cout << s << endl;
}
void getFiles(std::string path, std::vector<std::string> &files)
{
DIR *dir;
struct dirent *ptr;
if ((dir = opendir(path.c_str())) == NULL)
{
perror("Open dir error...");
exit(1);
}
/*
* 文件(8)、目录(4)、链接文件(10)
*/
while ((ptr = readdir(dir)) != NULL)
{
if (strcmp(ptr->d_name, ".") == 0 || strcmp(ptr->d_name, "..") == 0)
continue;
else if (ptr->d_type == 8)
files.push_back(path + ptr->d_name);
else if (ptr->d_type == 10)
continue;
else if (ptr->d_type == 4)
{
//files.push_back(ptr->d_name);
getFiles(path + ptr->d_name + "/", files);
}
}
closedir(dir);
}
#include <stdio.h>
#include <cstring>
#include <fcntl.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <dirent.h>
#include <errno.h>
//搜索 指定目录下的所有文件及其子目录下的文件
void getFileName(char * dirPath)
{
DIR *dir=opendir(dirPath);
if(dir==NULL)
{
printf("%s\n",strerror(errno));
return;
}
chdir(dirPath);//进入到当前读取目录
struct dirent *ent;
while((ent=readdir(dir)) != NULL)
{
if(strcmp(ent->d_name,".")==0||strcmp(ent->d_name,"..")==0)
{
continue;
}
int size = strlen(ent->d_name);
if(strcmp( ( ent->d_name + (size - 4) ) , ".cpp") != 0) //只存取.gmm 扩展名的文件名
continue;
struct stat st;
stat(ent->d_name,&st);
if(S_ISDIR(st.st_mode)) //如果是子目录,继续递归搜索
{
getFileName(ent->d_name);
}
else
{
printf("%s\n",ent->d_name);
}
}
closedir(dir);
chdir("..");//返回当前目录的上一级目录
}
int main(int argc, char *argv[])
{
getFileName("/root/git/Cplusplus/test/");
return 0;
}
https://blog.csdn.net/lei19880402/article/details/105774663
https://blog.csdn.net/yang_qi168/article/details/21723205
网友评论