阅读量:0
为了避免在使用C++的opendir函数进行递归遍历时发生栈溢出,可以考虑使用迭代方法和循环结构,而不是直接使用递归。这里有一个使用迭代方法遍历目录的示例:
#include<iostream> #include<string> #include<stack> #include <dirent.h> void listFiles(const std::string& path) { std::stack<std::string> directories; directories.push(path); while (!directories.empty()) { std::string currentPath = directories.top(); directories.pop(); DIR* dir = opendir(currentPath.c_str()); if (dir == nullptr) { std::cerr << "Error opening directory: "<< currentPath<< std::endl; continue; } struct dirent* entry; while ((entry = readdir(dir)) != nullptr) { std::string name(entry->d_name); if (entry->d_type == DT_DIR) { if (name != "." && name != "..") { directories.push(currentPath + "/" + name); } } else { std::cout<< currentPath + "/" + name<< std::endl; } } closedir(dir); } } int main() { listFiles("."); return 0; }
在这个示例中,我们使用了一个std::stack
来存储待处理的目录。通过使用迭代方法和循环结构,我们可以避免栈溢出的问题。注意,这个示例仅适用于支持dirent.h
库的系统(如Linux和macOS)。在Windows上,你需要使用其他库(如windows.h
)来实现类似的功能。