查找文件夹中所有类型的文件
C++ find all files of type in folder?
我试图列出文件夹中某种类型的所有文件,以便我可以遍历它们。这当然应该很简单,但我不明白。我已经找到了一些使用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);
}
相关文章:
- avrogencpp能为模式中的每种类型生成单独的头文件吗
- 我有两个类需要在同一 cpp 文件中相互引用,但第一个类无法识别第二个类类型的对象
- 如何从文本文件中读取数值,直到遇到字符类型?
- 如何将文本文件的特定行读取到 int 类型的数组中C++?
- 给定一个C++嵌套的私有结构类型,是否有从文件范围静态函数访问它的策略
- 使用 Boost.Spirit 解析具有混合数据类型的 OBJ 文件?
- 通过C++从目录中过滤特定文件类型
- C++模板编程设计问题 - 根据输入文件返回不同的类型
- C2011: 'Card':"类"类型重新定义(尽管使用了包含保护并且没有在文件中重新定义.cpp类)
- std::ifstream 在读取文件中最后一项时设置 eofbit,但仅在读取数值类型时发生
- 将类型保存到文件
- 我的头文件 DNode 中的我的数据类型未被识别为数据类型
- 当前不会命中断点。没有调试器目标代码类型的可执行代码与此文件关联
- Ini 文件类型名称 预期C++
- 用于随机数据访问的最有效文件类型
- Visual Studio 2019 - 设置文件类型的默认扩展名
- 如何在CTreeCtrl中获取所选项目的文件类型?文件扩展名可能被隐藏,因此 GetItemText 没有帮助
- 设计跨平台多内容类型文件格式的最佳方法
- 只计算*.cpp和*.h类型文件中的行数
- 当构造函数具有相同的参数类型(文件路径)时,如何从数组创建(初始化)std::元组