求助:两种情况下的S_ISDIR怎么得到不同的效果?
参考了2种遍历目录的写法,怎么大致上一样的写法却得到了不同的结果? 
 第一种:不是我想要的结果 
 int   browse_dir(string   dir) 
 { 
                         DIR   *pDir; 
                         struct   dirent   *pEnt; 
                         struct   stat   statbuf; 
                         string   sFileName;   
                         pDir   =   opendir(dir.c_str()); 
                         if   (pDir   ==   NULL)   { 
                                                 if   (errno   ==   ENOTDIR)   { 
                                                                         filenames.push_back(dir); 
                                                                         return   0; 
                                                 } 
                                                 perror(dir.c_str()); 
                                                 return   -1; 
                         } 
                         while   ((pEnt=readdir(pDir))!=   NULL) 
                         { 
                                                 if   ((pEnt-> d_name[0]== '. ')&&(pEnt-> d_name[1]== '. '   ||   pEnt-> d_name[1]==0)) 
                                                 { 
                                                                         continue; 
                                                 } 
                                                 lstat(pEnt-> d_name,&statbuf); 
                                                 if(!S_ISREG(statbuf.st_mode))//执行该代码后,无论是目录还是文件,均为true,所以只会打印出directory-> 。。。的结果,还有   如果把!S_ISREG改为S_ISDIR则把无论什么都会打印出file-> ..... 
                                                 { 
                                                             sFileName=   dir   +    "/ "   +   pEnt-> d_name; 
                                                             printf( "directory-> %s\n ",   sFileName.c_str()); 
                 &