Ошибка: идентификатор "_S_IFDIR" не определен - PullRequest
1 голос
/ 09 августа 2011

Я только что открыл один из своих старых проектов в Visual Studio (Windows), добавив проверку каталога, и обнаружил ошибку компиляции. Я просто скопировал функцию из моего другого рабочего проекта и добавил те же заголовки. Если вы нажмете F12, откроется stats.h, и вы получите идентификатор, но каким-то образом компилятор его не увидит?

#include <sys/types.h>
#include <sys/stat.h>

void my_function()
{
...
    struct _stat buf;        
    _wstat(dir, &buf);
    if ((buf.st_mode & _S_IFDIR) > 0) { // here _S_IFDIR undefined
        ...
    }
}

Ответы [ 3 ]

1 голос
/ 09 августа 2011

Поскольку символ POSIX равен S_ISDIR, и ваша система, по-видимому, в основном следует POSIX, но добавляя нижнее подчеркивание, возможно, _S_IFDIR следует заменить на _S_ISDIR (т. Е. Заменить F на S )?

0 голосов
/ 27 сентября 2016

Вы можете попробовать добавить следующее определение:

#if defined __WIN32__ || defined _WIN32 || defined _Windows
      #if !defined S_ISDIR
            #define S_ISDIR(m) (((m) & _S_IFDIR) == _S_IFDIR)
      #endif
#endif
0 голосов
/ 09 августа 2011

Вероятно, _S_IFDIR находится между проверкой #if, и это не выполняется.

//sys/stat.h
#ifdef SOMETHING  // <--- this needs to be true to activate below code
//...
#define _S_IFDIR 0
//...
#endif
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...