我在这里实现最佳答案时遇到了问题:How to get list of files with a specific extension in a given folder
我试图获得所有" .vol"目录argv [2]中的文件,并对我找到的每个文件进行一些批处理。我想将每个文件传递给ParseFile函数,该函数将字符串作为参数。
// return the filenames of all files that have the specified extension
// in the specified directory and all subdirectories
vector<string> get_all(const boost::filesystem::path& root, const string& ext, vector<boost::filesystem::path>& ret){
if(!boost::filesystem::exists(root) || !boost::filesystem::is_directory(root)) return vector<string>();
boost::filesystem::recursive_directory_iterator it(root);
boost::filesystem::recursive_directory_iterator endit;
while(it != endit)
{
if(boost::filesystem::is_regular_file(*it) && it->path().extension() == ext) ret.push_back(it->path().filename());
++it;
cout << *it << endl;
return *ret; // errors here
}
}
... main function
if (batch) {
vector<boost::filesystem::path> retVec;
vector<boost::filesystem::path> volumeVec = get_all(boost::filesystem::path(string(argv[2])), string(".vol"), retVec);
// convert volume files in volumeVec to strings and pass to ParseFile
ParseFile(volumeFileStrings);
}
我遇到了get_all函数以及如何正确返回向量的问题。
答案 0 :(得分:1)
将return语句更改为vector<boost::filesystem::path>
并从函数的参数中删除ret
,而是在函数中创建ret
,如下所示:
vector<boost::filesystem::path> ret;
然后,您想要在return ret;
循环下方移动ret的返回语句while
,以便将所有文件名追加到ret
。
您的代码将如下所示:
vector<boost::filesystem::path> get_all(const boost::filesystem::path& root, const string& ext){
if(!boost::filesystem::exists(root) || !boost::filesystem::is_directory(root)) return;
boost::filesystem::recursive_directory_iterator it(root);
boost::filesystem::recursive_directory_iterator endit;
vector<boost::filesystem::path> ret;
while(it != endit)
{
if(boost::filesystem::is_regular_file(*it) && it->path().extension() == ext) ret.push_back(it->path().filename());
++it;
cout << *it << endl;
}
return ret;
}