///************************************
// @function: StringContains
// @brief: 字符串包含
// @arg[in] str: 字符串
// @arg[in] contains: 包含子字符
// @return: bool true false
///************************************
inline bool StringContains(const std::string &str, const char* contains)
{
std::string::size_type position;
position = str.find(contains);
if (position != str.npos)
return true;
return false;
}
///************************************
// @function: GetFilenames
// @brief: 遍历目录中的子文件
// @arg[in] dir: 父目录
// @arg[out] filenames: 文件名列表(绝对目录)
// @return: int 文件数目
///************************************
inline int GetFilenames(const std::string& dir, std::vector<std::string>& filenames)
{
boost::filesystem::path path(dir);
if (!boost::filesystem::exists(path))
{
return -1;
}
if (boost::filesystem::is_regular_file(path))
{
filenames.push_back(dir);
return 0;
}
boost::filesystem::directory_iterator end_iter;
for (boost::filesystem::directory_iterator iter(path); iter != end_iter; ++iter)
{
if (boost::filesystem::is_regular_file(iter->status()))
{
std::string filename = iter->path().string();
if (StringContains(filename, ".bmp") ||
StringContains(filename, ".png") ||
StringContains(filename, ".jpg"))
filenames.push_back(iter->path().string());
}
if (boost::filesystem::is_directory(iter->status()))
{
GetFilenames(iter->path().string(), filenames);
}
}
return static_cast<int>(filenames.size());
}