主要原理:利用OpenCV 2.4.9自带的Directory类,以及先序遍历树的方法,对指定文件夹目录下所包含的所有子文件的路径进行深度优先搜索(Depth-First-Search,DFS),并将搜索结果保存于vector容器中
#include<iostream>
#include<opencv2\opencv.hpp>
#include<stack>
using namespace std;
using namespace cv;
void fileDfs(const char* rootPath,vector<string>& allFiles){
vector<string>tmp;
vector<string>tmpFiles;
stack<string>pths;
Directory dir;
pths.push(rootPath);
while(!pths.empty()){
tmp.clear();
tmpFiles.clear();
tmpFiles = dir.GetListFiles(pths.top(),"*.*",true);
if(!tmpFiles.empty()){
for(size_t i = 0,ends = tmpFiles.size();i < ends;i++){
allFiles.push_back(tmpFiles[i]);
}
}
tmp = dir.GetListFolders(pths.top(),"*",true);
pths.pop();
if(!tmp.empty()){
for(size_t i = 0,end = tmp.size();i < end;i++){
pths.push(tmp[i]);
}
}
}
}
int main(int argc, char* argv[])
{
vector<string>vec;
fileDfs("D:/forTest",vec);
for(int i = 0;i < vec.size();i++)
cout<<vec[i]<<endl;
}
测试:遍历此文件夹下的所有子文件 输入目录:D:/forTest 由于栈是后入先出的数据结构,根据先序遍历法则,首先读取1.txt路径,根目录路径出栈,随后1、2、3、4、5、6、7、8文件夹路径先后入栈 此时对栈顶元素8号文件夹进行文件查找(找到2.txt的路径),8号文件夹路径出栈,同时D:/forTest/8/8新建文件夹 路径入栈
此时找到3.txt路径,此目录下无子目录,仅需要将D:/forTest/8/8新建文件夹 出栈
此时栈里只有1、2、3、4、5、6、7文件夹目录,再按以上的方式进行查找,最后栈空,返回即可实现所有子文件路径的遍历
|