void mydir::get_one_dir(const string& parent, const string& dir_name)
{
ACE_DIR* base_dir = ACE_OS::opendir(parent.c_str());//打开父目录,并返回目录句柄
if(base_dir == NULL)
{
if(comparer(dir_name.c_str(), mid_type/*key of ext name*/) ||
comparer(dir_name.c_str(), MID_TYPE/*key of ext name*/))//比较文件扩展名
{
if(file_type_is_available(dir_name.c_str()))//判断文件类型是否是命令行参数传递进来的要处理
的文件类型
{
int i_file_type = get_file_type(dir_name);//根据文件名获取数据类型
string_vector_map::iterator it_file_array =
file_array.find(i_file_type);
if(it_file_array != file_array.end())
{
it_file_array->second.push_back(parent);
}
else
{
string_vector path_array;
path_array.push_back(parent);
file_array.insert(string_vector_map::value_type(i_file_type,
path_array));
}
}
}
}
else
{
struct ACE_DIRENT * dir = NULL;
while((dir = ACE_OS::readdir(base_dir)) != NULL)//根据目录句柄获取该目录下包含的一下个目
录
{
string str_ext = dir->d_name;
if(str_ext != "." && str_ext != "..")
{
if(parent.find('//') != string::npos)//windows下的目录递归
{
get_one_dir(parent + '//' + dir->d_name, string(dir->d_name));
}
else//linux下的目录递归
{
get_one_dir(parent + '/' + dir->d_name, string(dir->d_name));
}
}
}
ACE_OS::closedir(base_dir);//关闭目录
}
}