2013-05-01 80 views
2

我想通過使用stat()列出包含在目錄UROP中的所有文件。但是,該目錄不僅包含文件,還包含我想要搜索的文件夾。因此,我正在使用遞歸來訪問要列出其文件的文件夾。無法區分文件夾

但是,我的循環中的if條件無法區分文件和目錄,並且所有文件都顯示爲目錄;結果是無限遞歸代碼如下。先謝謝你!

using namespace std; 

bool analysis(const char dirn[],ofstream& outfile) 
{ 
    cout<<"New analysis;"<<endl; 
    struct stat s; 
    struct dirent *drnt = NULL; 
    DIR *dir=NULL; 

    dir=opendir(dirn); 
    while(drnt = readdir(dir)){ 
     stat(drnt->d_name,&s); 
     if(s.st_mode&S_IFDIR){ 
      if(analysis(drnt->d_name,outfile)) 
      { 
       cout<<"Entered directory;"<<endl; 
      } 
     } 
     if(s.st_mode&S_IFREG){ 
      cout<<"entered condition;"<<endl; 
      cout<<drnt->d_name<<endl; 
     } 

    } 
    return 1; 
} 

回答

0

代替if(s.st_mode&S_IFDIR)if(s.st_mode&S_IFREG)
嘗試if (S_ISDIR(s.st_mode))if (S_ISREG(s.st_mode))

+0

在S_ISDIR宏出現之前,通常使用'if((s.st_mode&S_IFMT)== S_IFDIR)...'。 – 2013-05-01 23:16:17

+0

是的,這也會起作用。 – Scott 2013-05-01 23:19:58