Willtwinny Ответов: 2

Проверьте, является ли имя файла каталогом в C


Что мне нужно сделать, так это перечислить все файлы в каталоге.
Если отображается каталог, то он также должен распечатать файлы в этом каталоге.

На данный момент у меня есть:
DIR *directory;
struct dirent *files;
char folderPath[] = "//home//unix//20//";


 // Make sure I can open the folder "test" otherwise throw an error
     if ((directory = opendir(folderPath)) == NULL)
     {
        printf("\nCouldn't Open Folder!\n");
        return 0;
     }
	// Loop around and check if the directory is another directory
	int i = 0;
		while ((files = readdir(directory)) != NULL)
		{
		  //printf("%s\n", files->d_name);
		  if (files->d_name 
		  i++;
		}
	printf("\n");


Этот код выводит все файлы и папки в этом каталоге.

Теперь мне нужно выяснить, является ли d_name каталогом, и если да, то распечатать содержимое этого каталога.

Может ли кто-нибудь помочь мне, как я могу это сделать?
спасибо

2 Ответов

Рейтинг:
20

Albert Holguin

Вы должны посмотреть на атрибуты файла... Буква "d" в первом поле обозначает каталог:
http://www.comptechdoc.org/os/linux/usersguide/linux_ugfilesp.html[^]

Я верю stat() даст вам атрибуты в linux:
http://pubs.opengroup.org/onlinepubs/000095399/functions/stat.html[^]


Willtwinny

Я уже прочитал его, и я все еще борюсь.
Так далеко я добрался:
if (stat(files->d_name, &statbuf) == -1)
{
printf("%s\n", files->d_name);
}
Но ничего не происходит.

Albert Holguin

что значит ничего не происходит? вы ничего не делаете с возвращаемым буфером (или структурой)...

Willtwinny

Получил это работает, в конце концов. Спасибо :)

Рейтинг:
2

Richard MacCutchan

Проверьте, если d_type & DT_DIR и если это так, то это каталог.