Поиск типа пути с помощью Windows API - PullRequest
2 голосов
/ 26 января 2011

Я пытаюсь найти тип файла, путь к которому. У меня есть это для Linux ::

    pathType CFilesystem::findPathType(const string& path) const
    {
        struct stat info;
        int status = stat(path.c_str(), &info);

        if(status == -1)
        {
            switch(errno)
            {
                case ENOENT: // A component of the path does not exist.
                    return pathType::none;

                default:
                    return pathType::unknown;
            }
        }

        if(S_ISDIR(info.st_mode))
        {
            return pathType::directory;
        }

        if(S_ISREG(info.st_mode))
        {
            return pathType::file;
        }

        return pathType::unknown;
    }

Но я не уверен, как сделать то же самое для Windows. _stat, кажется, не работает (он говорит, что файл не существует, даже знаю, что я ПОЛОЖИТЕЛЬНЫЙ, он существует. В конце концов, программирование выполняется из него.

Ответы [ 3 ]

4 голосов
/ 26 января 2011

Я думаю, что в Windows вам нужна функция GetFileAttributesEx

Вы также можете использовать обычную функцию _stat для оконхоть.Вы включаете sys/types.h и sys/stat.h?

3 голосов
/ 26 января 2011

Это уже было решено для вас :

pathType CFilesystem::findPathType(string const &path) const {
  using namespace boost::filesystem;
  boost::filesystem::path p (path);
  switch (status(p)) {
    case directory_file:  return pathType::directory;
    case file_not_found:  return pathType::none;
    case regular_file:    return pathType::file;
    default:              return pathType::unknown;
  }
}
3 голосов
/ 26 января 2011

_stat должно работать просто отлично. Я бы попытался выяснить, какой путь пытается решить ваша функция, отладка printf или отладчик. Это должно быть что-то очевидное. (Результат отладки printf может быть добавлен к вашему вопросу рядом с деревом каталогов, доказывающим, что файл там :))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...