Я только начал изучать C и пытаюсь сделать список путей. Я попытался перечислить путь в каталоге с помощью dirent
и попытался проверить, является ли результат файлом или каталогом, используя stat
. Однако, даже если путь является файлом, он вернет каждый путь в качестве каталога.Проверка того, является ли путь файлом или каталогом
Это мой код:.
[Edit]
#include <stdio.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <dirent.h>
int main(void)
{
DIR *mydir = opendir("/Library/Logs");
char path[250];
struct dirent *entry = NULL;
struct stat buf;
while((entry = readdir(mydir))) /* If we get EOF, the expression is 0 and
* the loop stops. */
{
snprintf(path, 250, "%s",entry->d_name);
stat(path,&buf);
if(S_ISDIR(buf.st_mode))
printf("D: %s\n", path);
else if (S_ISREG(buf.st_mode))
printf("F: %s\n", path);
else
printf("O: %s\n", path);
}
}
Если вы проверили 'ли стат() удалось', вы обнаружите, что она не каждый раз, если вы не находитесь в '/ Library/Logs' в качестве рабочего каталога. И вы не можете анализировать возвращенные данные из отказавшего системного вызова; вы ничего не можете сказать об информации в 'buf', за исключением того, что она похожа на запись в каталоге (но это просто случайно). См. [Joe] (http://stackoverflow.com/users/57135/joe) [ответ] (http://stackoverflow.com/a/20625123/15168) для краткого изложения того, что вам еще нужно, чтобы делать. Но проверка результата каждого системного вызова - хорошее начало. –