Получить только файлы, включенные в каталог в c / Ubuntu - PullRequest
0 голосов
/ 11 июля 2011

Мне нужно создать список файлов, содержащихся в определенном каталоге, я сделал приведенный ниже код (часть большой программы), но я бы хотел, чтобы моя программа игнорировала любые возможные папки, которые могли бы быть включены в каталог .

#include <stdio.h>
#include <sys/types.h>
#include <dirent.h>


int main ()
{
  DIR *dirptr;
  struct dirent *entry;     
  dirptr = opendir ("synchedFolder");



  if (dirptr != NULL)
  {
    while (entry = readdir (dirptr))
     {
         if(strcmp(entry->d_name,"..")!=0 && strcmp(entry->d_name,".")!=0)
          puts (entry->d_name);

     }

    (void) closedir (dirptr);
  }
  else
    perror ("ERROR opening directory");



}

Ответы [ 5 ]

2 голосов
/ 11 июля 2011

Если вы хотите перечислить только файлы, но не каталоги, вы должны добавить следующую проверку:

entry->d_type == DT_REG

или

entry->d_type != DT_DIR
1 голос
/ 11 июля 2011

Краткий ответ: структура директивы включает в себя необходимую информацию:

if ( entry->d_type == DT_REG)
1 голос
/ 11 июля 2011

Есть stat() и lstat() и возвращаемое значение для стат .В последнем случае обратите внимание на макрос S_ISDIR.

0 голосов
/ 25 марта 2014

Рабочий код для распечатки файлов (без каталогов):

#include <stdio.h>
#include <dirent.h>
#include <stdlib.h>

int main()
{
    DIR *dir;
    struct dirent *ent;
    if ((dir = opendir ("/home/images")) != NULL) 
    {
        /* print all the files and directories within directory */
        while ((ent = readdir (dir)) != NULL) 
        {
            if(ent->d_type!= DT_DIR)
            {
                printf ("%s\n", ent->d_name);
            }
        }   
        closedir (dir);
    }
    else 
    {
        /* could not open directory */
        perror ("");
        return EXIT_FAILURE;
    }
} 
0 голосов
/ 11 июля 2011

Проверка статистики (или lstat)

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>





/* int main (void){ */
int main (int argc, char **argv){
    int i,result=0;
    struct stat buf;

    /* print_S_I_types(); */


    for (i=1; i < argc; i++){
        if (lstat(argv[i], &buf) < 0) {
            fprintf(stderr, "something went wrong with %s, but will continue\n",
                   argv[i]);
            continue;
        } else {
            if S_ISREG(buf.st_mode){ 

                printf("argv[%d] is normal file\n",i);


            }else {
              printf("argv[%d] is not normal file\n",i);
            }
        }
    }

    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...