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;
- }