Проблема с S_ISDIR () приводит к C (возможно, потому что stat () не устанавливает свою структуру должным образом?)
Я хочу, чтобы моя программа взяла каталог, затем распечатала содержимое этого каталога и указала, является ли каждый элемент каталогом или нет. Если я дам ему каталог, содержащий файлы F1.txt и F2.txt и папки D1, D2 и D3, он должен вывести:
F1.txt не является каталогом
F2.txt не является каталогом
D1 это каталог
D2 это каталог
D3 это каталог
char* curr[100];
DIR* dirp = opendir(name);
struct dirent* x;
struct stat fstat;
//go to each file til readdir gives NULL
while((x = readdir(dirp)) != NULL) {
//store name of file
curr[0] = (x -> d_name);
//ignore files starting with "."
if(*curr[0] == '.')
continue;
//set status
stat(curr[0], &fstat);
//print file name
printf("%s", *curr);
//check if it's a directory and print result
if(S_ISDIR(fstat.st_mode))
printf(" is directory\n");
else
printf(" is not directory\n");
}
Это печатает, говоря, что все файлы не являются каталогами. Если я удаляю часть, которая игнорирует файлы, начинающиеся с ".", он говорит, что F1.txt, F2.txt и D1 не являются каталогами, и что., D2, D3 и .. являются каталогами (в этом порядке). Это заставляет меня думать, что проблема заключается в статистическом вызове, а не в использовании макросов, но яЯ очень запутался здесь, поэтому я нея знаю