2017-11-13 5 views
-1

폴더의 경로를 가져 와서 디렉토리 이름을 인쇄하는 프로그램을 작성하려고합니다. "."문제입니다 내가 그것을 줄 때 지금디렉토리에서 폴더를 검색 중

if ((dir = opendir (file_path)) != NULL) 
{ 
    while ((ent = readdir (dir)) != NULL) 
    { 
     if (stat(ent->d_name, &dir_stat)== 0) 
     { 
     if(dir_stat.st_mode & S_IFDIR) 
     { 
      if(strncmp(ent->d_name, "." ,sizeof(ent->d_name)) != 0 
        && strncmp(ent->d_name, "..",sizeof(ent->d_name)) != 0) 
       cout<<"dir : "<< ent->d_name<<endl; 
     } 

     } 
    } 
} 

: 이 내 코드입니다 file_path 그것은 올바르게 작동하지만, ./folder를 file_path로 지정하면 아무 것도 출력하지 않습니다. 어떤 아이디어로 그것을 고치는 법? 미리 감사드립니다.

+2

무엇 디버깅 그런 다음 stat("sub")을하는 것은 당신이 읽고있는 디렉토리를 연결하는이 작동하지 않습니다 계단을 가져 갔니? 서브 디렉토리로 재귀해야합니까? –

+2

질문의 형식을 올바르게 지정하십시오. C에서 줄은'>'로 시작합니까? –

+0

@DaveNewton 네,하지만 지금은이 문제를 해결하고 하위 디렉토리 검색을하고 싶습니다. – Winston

답변

1

readdir()은 도착할 경로가 아닌 하위 디렉터리의 이름을 반환합니다.

예를 들어 ./folder/sub 인 경우 ./folder을 읽을 때 이름으로는 sub이 표시됩니다. 시스템이 호출 후

while ((ent = readdir (dir)) != NULL) 
{ 
    std::string path = dir; 
    path += ent->d_name; 
    if (stat(path.c_str(), &dir_stat)== 0) 
    { 

그것은 일반적으로 좋은 생각이 몇 가지 perror() 호출을 추가하는 것입니다 :

if (stat(path.c_str(), &dir_stat) < 0) 
     perror(path.c_str()); 
    else 
    { 
     ...