Я пишу программу, проверяющую, является ли что-то файлом или является каталогом. Есть ли лучший способ сделать это, чем это?Проверка, является ли файл каталогом или просто файлом
#include <stdio.h>
#include <sys/types.h>
#include <dirent.h>
#include <errno.h>
int isFile(const char* name)
{
DIR* directory = opendir(name);
if(directory != NULL)
{
closedir(directory);
return 0;
}
if(errno == ENOTDIR)
{
return 1;
}
return -1;
}
int main(void)
{
const char* file = "./testFile";
const char* directory = "./";
printf("Is %s a file? %s.\n", file,
((isFile(file) == 1) ? "Yes" : "No"));
printf("Is %s a directory? %s.\n", directory,
((isFile(directory) == 0) ? "Yes" : "No"));
return 0;
}
При рассмотрении случаев symlink используйте lstat() вместо stat(), поскольку он не соответствует символической ссылке. – Sparky
Существует, по крайней мере, хорошее обсуждение в [Проверка наличия каталога] (http://stackoverflow.com/questions/3828192/checking-if-a-directory-exists-in-unix-system-call/), где ' stat() 'и' lstat() ', а также полный набор типов файлов POSIX. Я соблазн дублировать этот вопрос на этот вопрос. Код также должен проверять результат 'stat()' и обрабатывать ошибки соответствующим образом. –
@ Джонатан, этот ответ действительно более совершенен, чем мой, и был опубликован за три месяца до моего, пять лет назад. И это не похоже на то, что мой собственный ответ исчезнет. Я вижу, что вы владеете Mjölnir в теге '[c]', поэтому благодарим вас за комментирование, прежде чем действовать в одностороннем порядке. Однако вы в конечном счете правы. Не беспокойтесь, делайте то, что вам нужно сделать :) –