boost 遍历文件或目录

来源:互联网 发布:淘宝售假扣2分多久清零 编辑:程序博客网 时间:2024/06/13 12:12
#include <iostream>#include <fstream>#include <boost/filesystem.hpp>#include <boost/io/ios_state.hpp>#include <boost/progress.hpp>int main(int argc, char **argv){//////////////////////////////////////////////////////////////////////////// 遍历当前路径下的中的目录,只能迭代本层目录{boost::progress_timer t;{std::ofstream of("path.log");// 保存流的所有状态,以便恢复boost::io::ios_all_saver ifs(std::cout);std::cout.rdbuf(of.rdbuf());boost::filesystem::directory_iterator end;for (boost::filesystem::directory_iterator pos("J:");pos != end;++pos){std::cout << *pos << std::endl;// 返回path类型,继而返回文件名//pos->path().filename();}}}//////////////////////////////////////////////////////////////////////////// 指定深度的目录遍历{boost::progress_timer t;{std::ofstream of("file1.log");// 保存流的所有状态,以便恢复boost::io::ios_all_saver ifs(std::cout);std::cout.rdbuf(of.rdbuf());boost::filesystem::recursive_directory_iterator end;for (boost::filesystem::recursive_directory_iterator pos("J:");pos != end;++pos){if (boost::filesystem::is_directory(*pos) && (pos.level() > 5) ){pos.no_push();}elsestd::cout << "level -- " << pos.level() << ":" << *pos << std::endl;}}}//////////////////////////////////////////////////////////////////////////// 深度迭代所有目录和文件{boost::progress_timer t;{std::ofstream of("file.log");// 保存流的所有状态,以便恢复boost::io::ios_all_saver ifs(std::cout);std::cout.rdbuf(of.rdbuf());boost::filesystem::recursive_directory_iterator end;for (boost::filesystem::recursive_directory_iterator pos("J:");pos != end;++pos){std::cout << "level -- " << pos.level() << ":" << *pos << std::endl;}}}return 0;}

第二个花费的时间过多,是因为每次遍历都执行了三次判断,所以时间稍长。单线程便利只要2秒,相当牛

0 0
原创粉丝点击