Задать вопрос
@frilix
Иногда "творю"

Библиотека для чтения директорий?

Доброго времени суток, ищу библиотеку для работы с файловой системой линукс. Пишу аналог диалогового окна с выбором директории для сохранения ( такое задание с универа ). Для отрисовки интерфейса использую SDL2

Что нужно от библиотеки:
  1. Чтение директории
  2. Отличить файлы от папок ( для иконки и перехода в нее )


Смотрел dirent.h устраивает все, кроме того, что не отличает файлы от папок. Есть идея проверять если папка пробуя открывать таким образом: имя директории + файл/папка в дериктори + "/" и если открывается (true), то помечать как папка, но подозреваю такой подход неправильный хотя бы потому что у папки могут быть разные права или что-то подобное.

Есть ли аналоги данной библиотеки, можно как-то определить папку через diren.h ?
  • Вопрос задан
  • 519 просмотров
Подписаться 1 Оценить 1 комментарий
Пригласить эксперта
Ответы на вопрос 3
AtomKrieg
@AtomKrieg
Давай я поищу в Google за тебя
отличает дирент папки от файлов
ent = readdir(curr_dir);
switch (ent->d_type)
{
// directory
case DT_DIR:	break;
//files
case DT_REG:	break;
}
Ответ написан
Комментировать
Winsik
@Winsik
сис.админ, недопрограммист :)
unsigned char d_type; /* type of file; not supported
by all file system types */
www.gnu.org/software/libc/manual/html_node/Directo...
<skip>
DT_DIR
    A directory.
<skip>
Ответ написан
Комментировать
@abcd0x00
Системный вызов stat() даёт структуру, в которой указаны все свойства.

man stat.h

The  following  symbolic names for the values of type mode_t shall also
be defined.

File type:

S_IFMT Type of file.

S_IFBLK
       Block special.

S_IFCHR
       Character special.

S_IFIFO
       FIFO special.

S_IFREG
       Regular.

S_IFDIR
       Directory.
...

The following macros shall be provided to test whether a file is of the
specified  type.  The  value  m  supplied to the macros is the value of
st_mode from a stat structure.  The macro shall evaluate to a  non-zero
value if the test is true; 0 if the test is false.

S_ISBLK(m)
       Test for a block special file.

S_ISCHR(m)
       Test for a character special file.

S_ISDIR(m)
       Test for a directory.

S_ISFIFO(m)
       Test for a pipe or FIFO special file.

S_ISREG(m)
       Test for a regular file.

S_ISLNK(m)
       Test for a symbolic link.

S_ISSOCK(m)
       Test for a socket.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы