Я пытался найти способ сопоставить содержимое каталога, а также проверить, является ли найденный «элемент» файлом или каталогом.
Я перепробовал все "решения", найденные здесь:
Как проверить, существует ли каталог? , Как проверить, существует ли каталог в Windows в C? и Проверка, является ли файл каталогом или просто файлом
(поэтому мой пост здесь не дубликат)
Ничто не помогало мне. Я на Windows 10. Я не фанат этих библиотек Windows, во всяком случае. Вот почему я ищу способ, который только стандартный C.
Вот мой код:
struct dirent *de;
DIR *dr = opendir(opts->dirname);
#define DF_ISDIR 0x100
#define DF_ISFILE 0x200
#define DF_NOEXIST 0x400
while ((de = readdir(dr)) != NULL) {
int exists = df_isdirectory(de->d_name);
printf("[%s]: '%s'\n", exists == DF_ISDIR ? "DIR" : exists == DF_ISFILE ? "FILE" : "WHATEVER", de->d_name);
}
и
int df_isdirectory(const char *name) {
assert(name != NULL);
DIR *dp = NULL;
if (_access(name, F_OK) == 0) {
if ((dp = opendir(name)) != NULL) {
closedir(dp);
return DF_ISDIR; // element is directory
} else {
return DF_ISFILE; // element is a file
}
}
return DF_NOEXIST; // element is whatever
}
Это дает мне следующий результат:
Как мы видим, программа обнаруживает, что ... и. как каталоги, но не один элемент в моем каталоге. Даже если «another» и «dfgsdgf» являются директориями!
Так почему же мои действительные каталоги не считаются каталогом?
Примечание: один каталог ("dfgsdgf") пуст, другой ("другой") заполнен 2 файлами.
Потратив так много времени и испробовав кучу «рабочих» решений, я постепенно устаю от этого. Я хочу получить подробное объяснение, ПОЧЕМУ МОЙ КОД НЕ РАБОТАЕТ, КАК ОЖИДАЕТСЯ, и фрагмент кода, КОТОРЫЙ РАБОТАЕТ на 100%.
PS: мой тестовый каталог C: \ test
Мой исполняемый файл не находится в той же директории.
Спасибо, и хорошего дня!
~ Себастьян