2013-10-21 1 views
0

내 프로그램에서 디렉토리를 가져 와서 해당 디렉토리의 내용을 인쇄하고 각 항목이 디렉토리 또는 아닙니다. 나는 그것을 파일 F1.txt 및 F2.txt 및 폴더 D1, D2 및 D3를 포함하는 디렉토리를 줄 경우, 인쇄해야합니다 :S_ISDIR() 문제가 C (아마도 stat()가 구조체를 제대로 설정하지 않았기 때문일 수도 있습니다)

F1.txt 디렉토리
하지 F2.txt 디렉토리
없는 D1은 디렉토리
D2는 D3 디렉토리

char* curr[100]; 
DIR* dirp = opendir(name); 
struct dirent* x; 
struct stat fstat; 

//go to each file til readdir gives NULL 
while((x = readdir(dirp)) != NULL) { 

    //store name of file 
    curr[0] = (x -> d_name); 

    //ignore files starting with "." 
    if(*curr[0] == '.') 
    continue; 

    //set status 
    stat(curr[0], &fstat); 

    //print file name 
    printf("%s", *curr); 

    //check if it's a directory and print result 
    if(S_ISDIR(fstat.st_mode)) 
    printf(" is directory\n"); 
    else 
    printf(" is not directory\n"); 
} 

이 인쇄 모든 파일이 디렉토리 아니라는 것을 말하는 것입니다 디렉토리
입니다. "."로 시작하는 파일을 무시하는 부분을 제거하면 F1.txt, F2.txt 및 D1은 디렉토리가 아니며., D2, D3 및 ..은 디렉토리입니다 (순서대로). 그게 내 문제는 매크로를 사용하는 것이 아니라 stat 호출과 관련이 있다고 생각하게 만들지 만 여기서는 꽤 혼란 스럽기 때문에 잘 모릅니다.

답변

1

stat은 파일 이름을 전달하지만 파일 경로가 필요합니다. stat의 반환 값을 확인하면 어느 디렉토리 에나 있기 때문에 ...에 대해서만 성공한 것으로 나타납니다.

정식 답변 : 오류 조건을 통해 불어 나는 프로그램의 동작을 이해하려고 시도하지 마십시오. 신비한 (가장 최근에) 가장 작은 비트 일 자마자 모든 기능의 반환 값을 확인하는 코드를 추가하십시오.

+0

감사합니다. 그것과 같은 간단한 것이라고 생각했습니다>.> – user2268668

+0

+1 "반환 값 확인을위한 코드 추가". – chux

관련 문제