//读取文件列表函数 int readFileList(const char *basePath, std::vector<std::string> &vfilename, std::vector<std::string> &vfile) { DIR *dir; struct dirent *ptr; char base[1000]; if ((dir = opendir(basePath)) == 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 { char ch[256]; snprintf(ch, 256, "%s/%s", basePath, ptr->d_name); vfilename.push_back(ptr->d_name); std::string d_name(ch); vfile.push_back(d_name); printf("%s\n", d_name.c_str()); } // else if (ptr->d_type == 10) ///link file // printf("d_name:%s/%s\n", basePath, ptr->d_name); // else if (ptr->d_type == 4) ///dir // { // memset(base, '\0', sizeof(base)); // strcpy(base, basePath); // strcat(base, "/"); // strcat(base, ptr->d_name); // readFileList(base); // } } closedir(dir); return 1; } 优化下上面代码
时间: 2023-06-01 13:03:52 浏览: 57
&fileList)
{
DIR *dir;
struct dirent *ptr;
char base[1000];
if ((dir = opendir(basePath)) == NULL)
{
perror("Open dir error...");
exit(1);
}
while ((ptr = readdir(dir)) != NULL)
{
if (strcmp(ptr->d_name, ".") == 0 || strcmp(ptr->d_name, "..") == 0)
continue;
else if (ptr->d_type == DT_DIR)
{
memset(base, '\0', sizeof(base));
snprintf(base, sizeof(base), "%s/%s", basePath, ptr->d_name);
readFileList(base, fileList);
}
else
{
fileList.push_back(ptr->d_name);
}
}
closedir(dir);
return 0;
}
// 该函数实现了递归遍历指定目录下的所有文件,并将文件名存入到std::vector<std::string>类型的fileList变量中。其中,basePath为要遍历的目录路径,fileList为存放文件名的vector容器。