2014-11-26 1 views
1

폴더의 경로를 수신하고 그 내부에있는 파일 수를 반환해야하는 작은 함수를 작성했습니다.dirent를 사용하여 디렉토리에있는 기존 파일의 수를 잘못 계산하는 이유는 무엇입니까?

내 대답이 정확하지 않습니다. 인쇄 할 때 ...이 인쇄됩니다.

누군가 내게 이유를 말해 줄 수 있습니까? 2가 줄어들면 해결할 수 있습니까? 여기

코드입니다 :

{ 
    struct dirent *entry; 
    DIR *dirp; 
    int fileCount = 0; 
    char currPath[MAX_STR]; 
    dirp = opendir(clientLocalPath); 
    printf(" ***** printing files!!!!! ********\n"); 
    while((entry = readdir(dirp)) != NULL) 
    { 
      strcpy(currPath, entry->d_name); 
      printf("%s\n",currPath); 
      fileCount++; 

    } 
    closedir(dirp); 
    return fileCount; 
} 
+0

가능한 중복 ([C, readdir은() 대신 파일의 도트로 시작] HTTP : 당신이 그들을 무시하고 fileCount 변수에 대한 파일의 나머지 부분을 고려할 경우, 당신은 이런 식으로 뭔가를 할 수 : //stackoverflow.com/questions/20265328/c-readdir-beginning-with-a-dots-instead-of-files) –

답변

1

이 정상이며 모두 ...이 디렉토리의 일부이기 때문에 그런 일이 : .가 부모를 현재와 ..을 의미합니다. What is a dot only named folder?에서

는 :

모든 디렉토리는 ... 항목이 포함되어 있습니다.

.은 디렉토리 자체를 의미합니다. 현재 디렉토리라고합니다.

..은 해당 디렉토리의 상위 디렉토리 즉, 해당 디렉토리가 포함 된 디렉토리를 의미합니다. Why do directory listings contain the current (.) and parent (..) directory?에서

:

가장 좋은 방법은 당신이 목록 그들에게하지 않으려면 단지 strcmp하고, 그들을 무시하는 것입니다.

2

.

..는 상위 디렉토리

파일 scaning 동안 모든 폴더에서 찾을 수 있습니다 이들 2 명에게있는 현재 디렉토리입니다. 파일 이름을 가져 오는 동안 코드의 이름을 검사하여이 두 값을 무시할 수 있습니다. 예를 "..\tmp.txt"를 들어

라는 이름의 파일 tmp.txt 현재 디렉토리

2

이 동작의 상위에 위치를 지정하는 것은 완벽하게 정상입니다. ...은 각각 현재 및 상위 디렉토리를 나타냅니다.

while((entry = readdir(dirp)) != NULL) 
{ 
    if (strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0) 
        printf("\0"); 
    else 
    { 
     strcpy(currPath, entry->d_name); 
     printf("%s\n",currPath); 
     fileCount++; 
    } 
}