这是我在这里发表的第一篇官方文章,让我们开始吧: 我需要在我的类Searcher中创建一个方法来查找目录中的所有文本文件并将它们添加到向量中。 我想,当我找到另一个目录时,以递归方式调用该函数,以便我可以搜索该目录中的.txt文件以及等等。 所以我就是这样做的:
void IndexIt(string direktorij) {
string pom(direktorij);
DIR* dir = opendir(direktorij.c_str());
if(dir==NULL) {
cout<<"Ne mogu otvoriti direktorij!";
return;
}
struct dirent *file;
while ((file = readdir(dir))!=NULL) {
string filename(file->d_name);
if (filename.substr(filename.length()-4)== ".txt") {
AddTheFilenameInVector(filename); //made a simple method to add the filename in a vector
} //so I could save it for later use
string filepath = pom + "\\" + filename;
try {
struct stat filedata;
stat (filepath.c_str(), &filedata);
if (S_ISDIR(filedata.st_mode)) {
IndexIt(filepath);
}
}
catch(...) {
int b(2);
cout<<" "<<b*2;
}
}
}
当我尝试构建它时,我只是在try-catch块中获取捕获的异常。我一定做错了,我怀疑我对IndexIt(filepath)的递归调用。 我尝试过其他替代方案,例如
string directory;
const size_t last_slash_idx = filename.rfind('\\');
if (std::string::npos != last_slash_idx) {
directory = filename.substr(0, last_slash_idx);
}
获取文件路径,也没有解决我的问题。 我希望我解释得很好。
我忘了说除了那些波纹管以外的任何图书馆都是不允许的。
#include <iostream>
#include <vector>
#include <string>
#include <stdio.h>
#include <string.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <dirent.h>
#include <fstream>