查找文件夹中所有类型的文件

C++ find all files of type in folder?

本文关键字:类型 文件 文件夹 查找      更新时间:2023-10-16

我试图列出文件夹中某种类型的所有文件,以便我可以遍历它们。这当然应该很简单,但我不明白。我已经找到了一些使用direct .h的例子,但我需要在c++中直接这样做。

做这件事最好的方法是什么?

谢谢。

不能在"直接c++ "中这样做,因为c++还没有文件系统API。

我通常会推荐Boost。文件系统在这里,但据说你想"尽量避免使用第三方头文件"。

所以您最好的选择是使用POSIX direct .h,就像您一直在做的那样。这是目前你能得到的最"非第三方"的东西。

像这样?这将在您指定的文件夹中查找所有suid文件,但可以修改以查找任意数量的内容,或者使用正则表达式作为扩展名,如果这就是您所说的'type'。

#include <sys/stat.h>
#include <sys/types.h>
#include <iostream>
#include <string>
#include <sstream>
#include <dirent.h>
#include <vector>

bool is_suid(const char *file)
{
  struct stat results;
  stat(file, &results);
  if (results.st_mode & S_ISUID) return true;
  return false;
}

void help_me(char *me) {
  std::cout
  << "Usage:" << std::endl
  << " " << me << " /bin/ /usr/sbin/ /usr/bin/ /usr/bin/libexec/" << std::endl;
  exit(1);  
}

int main(int argc, char **argv)
{
  if (argc < 2) help_me(argv[0]);
  std::string file_str;
  std::vector<std::string> file_list;
  for (int path_num = 1; path_num != argc; path_num++) {
    const char * path = argv[path_num];
    DIR *the_dir;
    struct dirent *this_dir;
    the_dir = opendir(path);
    if (the_dir != NULL) while (this_dir = readdir(the_dir)) file_list.push_back(std::string(this_dir->d_name));
    std::string name;
    for(int file_num = 0; file_num != file_list.size(); file_num++) {
      name = file_list[file_num];
      std::string path_to_file = std::string(path) + file_list[file_num];
      if (is_suid(path_to_file.c_str()) == true) std::cout << path_to_file << std::endl;
    }
    file_list.clear();
    file_list.shrink_to_fit();
  }
  exit(0);
}