懒的写说明 直接铺代码
#include <boost/tokenizer.hpp>
#include <boost/algorithm/string.hpp>
#include <boost/filesystem/exception.hpp>
#include "FilePath.hpp"
using namespace boost::algorithm;
namespace g
{
namespace file
{
FilePath::FilePath(string _filepath): filepath(_filepath),
subpath(false),
usesf(false)
{}
void FilePath::set_suffix(const string &suffixs)
{
string temp(suffixs);
to_lower(temp);
tokenizer<> sf(temp);
for(tokenizer<>::iterator itr = sf.begin(); itr != sf.end();++itr)
{
suffix.insert(*itr);
}
usesf = true;
}
void FilePath::get_files(vector<string> &files)
{
boost::filesystem::path _filepath(filepath,boost::filesystem::native);
find(_filepath);
files = file;
}
void FilePath::find(boost::filesystem::path p)
{
try
{
if(boost::filesystem::exists(p) == true)
{
boost::filesystem::directory_iterator item_begin(p);
boost::filesystem::directory_iterator item_end;
for(;item_begin != item_end; item_begin++ )
{
if (boost::filesystem::is_directory( * item_begin) == true && subpath == true)
{
// (*item_begin)
//(*itr)
find(item_begin->path());
}
else
{
string filename =item_begin->leaf();
if(usesf == true)
{
to_lower(filename);
set<string>::iterator itr = suffix.begin();
while(itr != suffix.end())
{
if(ends_with(filename, *itr)== true)
file.push_back(filename);
itr ++;
}
}
else
{
file.push_back(filename);
}
}
}
}
}
catch(boost::filesystem::filesystem_error e)
{
}
}
}
}