c语言获取指定目录下的文件名和类型
把地图文件名发给web端
//获取地图目录下的所有地图文件
void GetFileNames(string path,vector<string>& filenames)
{
DIR *pDir;
struct dirent* ptr;
if(!(pDir = opendir(path.c_str())))
return;
while((ptr = readdir(pDir))!=0) {//返回当前目录的进入点,string path路径的进入点为当当前目录 "." . 和 上一个目录 ".."
//strchr返回 "."之后的字符串
//if ((strcmp(ptr->d_name, ".") != 0 )&& (strcmp(ptr->d_name, "..") != 0)&&(0 != strcmp(strchr(ptr->d_name, '.'), ".yaml")))//过滤掉.yaml文件
if ((strcmp(ptr->d_name, ".") != 0 )&& (strcmp(ptr->d_name, "..") != 0)&&(strcmp(strchr(ptr->d_name, '.'), ".pgm")==0))//过滤掉.yaml文件
filenames.push_back( ptr->d_name);
}
closedir(pDir);
}
int main(int argc, char **argv)
{
ros::init(argc, argv, "map_server", ros::init_options::AnonymousName);
// step 1 : 检查rosrun map_server的命令是否正确
ros::NodeHandle nh("~");
//切换地图
mapfile_pub=nh.advertise<map_server::updatemap>( "/mapfile" , 5 );
string path_="/home/lth/catkin_ws/src/telpo_navigation/maps";
vector<string> file_name;
GetFileNames(path_,file_name);
int len =file_name.size();
map_server::updatemap msg;
for(int i=0;i<len;i++){
msg.mapfile[i]=file_name[i];
}
mapfile_pub.publish(msg);
}