红联Linux门户
Linux帮助

Linux下Gtkmm枚举目录中所有文件(包含子目录)

发布时间:2014-12-24 16:01:43来源:linux网站作者:yanzisoftware

Linux下Gtkmm枚举目录中所有文件(包含子目录),使用glibmm库.


#include <gtkmm.h>  
#include <glibmm.h>  
#include <giomm.h>  
#include <iostream>  
#include <string>  
#include <vector>  
using namespace Gtk;  
using namespace Glib;  
using namespace std;  
void EnumDir(string rootpath,vector<Glib::ustring>& vString)  
{  
Glib::Dir dirs(rootpath);  
std::list<std::string> entries (dirs.begin(), dirs.end());  
for(std::list<std::string>::iterator  dirItr=entries.begin();dirItr!=entries.end();dirItr++)  
{  
//使用流输出Glib::ustring一定要.c_str()或.raw()  
//不然可提示:"terminate called after throwing an instance of 'Glib::ConvertError'".  
Glib::ustring fullpath=rootpath+"/"+*dirItr;  
//cout<<fullpath.c_str()<<"--------"<<endl;  
//cout<<fullpath.raw()<<"#######"<<endl;  
vString.push_back(fullpath);  
try 
{  
//Glib::file_test(fullpath,Glib::FILE_TEST_IS_DIR | Glib::FILE_TEST_EXISTS)  
//上述表达式表示:如果fullpath为目录或文件存在均返回真  
//Glib::file_test(fullpath,Glib::FILE_TEST_EXISTS & Glib::FILE_TEST_IS_DIR)  
//上述表达式表示:如果fullpath为目录且目录存在才返回真,还过这样写没必要,Glib::FILE_TEST_IS_DIR
if (Glib::file_test(fullpath,Glib::FILE_TEST_IS_DIR))  
{  
EnumDir(fullpath,vString);  
}  
}  
catch(Glib::FileError er)  
{  
cout<<"Error:"<<fullpath.c_str()<<":"<<er.what().c_str() <<endl;  
}  
}  
}  
int main(int argc,char* argv[])  
{  
vector<Glib::ustring> files;  
EnumDir("/home/yanxiang/桌面",files);  
for(vector<Glib::ustring>::iterator itr=files.begin();itr!=files.end();itr++)  
{  
cout<<(*itr).c_str()<<"********"<<endl;  
}  
return 0;  
}