2010-11-24 5 views
0

디렉토리에있는 파일 목록을 가져와야한다는 점에서 문제가 있습니다. 지금은 거의 정확하게 내가 너무 그것을 할 방법을 작동하지만 문제는 그것 또한 그가 파일에 디렉토리을 나열하고 있다는 점이다C에서 파일 목록에서 디렉토리를 제거해야 함

void get_files(int maxfiles) { 
    int count = 0; 
    DIR *dir; 
    struct dirent *ent; 
    dir = opendir(DIRECTORY); 
    if (dir != NULL) { 

     /* get all the files and directories within directory */ 
     while ((ent = readdir(dir)) != NULL) { 
      if (count++ > maxfiles) break; 

      printf("%s\n", ent->d_name); 
     } 
     closedir(dir); 
    } else { 
     /* could not open directory */ 
     printf("ERROR: Could not open directory"); 
     exit(EXIT_FAILURE); 
    } 
} 

: 도심이 previous StackOverflow question을 사용하여, 나는 현재이 코드를 가지고 나는 단지 파일 엔트리 만 원한다. 이 작업을 쉽게 수행 할 수 있습니까?

답변

2

POSIX는 파일이 디렉토리인지 여부를 확인하기 위해 사용할 수있는 fstat을 정의합니다. 또한 검사를 단순화하는 매크로가 있습니다.
http://linux.die.net/man/2/fstat
Windows의 경우 Windows API를 사용해야 할 수도 있습니다. 당신의 struct dirent가 널리 사용할 수 비표준하지만-d_type 멤버가 포함 된 경우

+0

두려움; 'fstat'도 Windows에서 작동합니다. – Gabe

0

유사한 코드를 사용하여 디렉토리를 필터링 할 수 있습니다, 당신은 디렉토리를 필터링하려면이 옵션을 사용할 수 있습니다. 사용하지 않는 시스템에서는 stat으로 넘어갈 수있는 옵션이 있습니다. stat가 아닌 d_type을 사용하면 디렉토리 목록이 수십 배나 수백 배 빨라질 수 있습니다.