Перекрестный платформенный способ тестирования того, является ли файл каталогом

StackOverflow https://stackoverflow.com/questions/2197918

Вопрос

В настоящее время у меня есть какой-код, как (конденсируется и удалил кучу проверки ошибок):

dp = readdir(dir);
if (dp->d_type == DT_DIR) {
}

Это работает сложнее на моем машине Linux. Однако на другой машине (выглядит как Sunos, Sparc):

SunOS HOST 5.10 Generic_127127-11 sun4u sparc SUNW,Ultra-5_10

Я получаю следующую ошибку во время компиляции:

error: structure has no member named `d_type'
error: `DT_DIR' undeclared (first use in this function)

Я думал dirent.h Заголовок был CrossPlatform (для машин POSIX). Какие-либо предложения.

Это было полезно?

Решение

Реф http://www.nexenta.org/os/porting_codefixes.:

Определение конструкции в Solaris не содержит d_type поле. Вам нужно будет внести изменения следующим образом

if (de->d_type == DT_DIR)
{
   return 0;
}

изменения к

struct stat s; /*include sys/stat.h if necessary */
..
..
stat(de->d_name, &s);
if (s.st_mode & S_IFDIR)
{
  return 0;
}

С stat Также POSIX Standard Это должна быть более кроссплатформенная. Но вы можете использовать if ((s.st_mode & S_IFMT) == S_IFDIR) следовать стандарту.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top