2010-11-24 1 views
0

У меня проблема: мне нужно получить список файлов в каталоге. Используя эту previous StackOverflow question в качестве основы, я в настоящее время получил этот код:Нужно устранить каталоги из списка файлов в 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); 
    } 
} 

Теперь он работает почти точно, как я хочу его тоже, но проблема в том, что его также список каталогов с использованием он-файлов, и Мне нужны только записи в файлах. Есть ли легкая модификация, которую я могу сделать для этого?

ответ

2

POSIX определяет fstat, который может использоваться для проверки того, является ли файл каталогом. Он также имеет макрос, чтобы упростить проверку.
http://linux.die.net/man/2/fstat
Обратите внимание, что для Windows вам, возможно, придется использовать API Windows здесь.

+0

Fear not; `fstat` работает и в Windows. – Gabe 2010-11-24 14:26:14

0

Если struct dirent содержит нестандартный но-широко доступен d_type элемента, вы можете использовать это, чтобы отфильтровать каталоги. Стоит иметь возможность использовать его и только отступать до stat в системах, которые этого не делают, поскольку с помощью d_type вместо stat, возможно, сделает ваш каталог в десятки или сотни раз быстрее.

Смежные вопросы