is_directory () в VS2012 возвращает false для четных каталогов

Я бегу через каталог, содержащий несколько подкаталогов. Я использую recursive_directory_iterator. У меня есть каталог asr->collection ->(несколько каталогов и несколько текстовых файлов)

#include <iostream>
#include <filesystem>
#include <conio.h>

using namespace std::tr2::sys;

int main () {
std::string path_;
std::cout << " Enter the path ";
std::cin >> path_;

auto dir_path = path(path_);

for (auto it = directory_iterator(dir_path); it != directory_iterator(); ++it)
{
    const auto& file = it->path();
    std::cout << " path : " << file << std::endl;

    if (is_directory (status(it->path()))) 
        std::cout << " It is a directory. " << std::endl;
    else 
        std::cout << " It is not a directory. " << std::endl;
}
_getch();
return 0;
}

Я знаю, что опубликовал это ранее. Это была глупая ошибка, я ее изменил. Но это все еще глючит. У меня проблема в том, что is-каталог возвращает false для всего. Я использую это неправильно. Я связал URL-адрес MSDN ниже.

Я установил boost и запустил код. Это сработало! Источник повышения

#include <iostream>
#include <boost\filesystem.hpp>
#include <conio.h>

using namespace boost::filesystem;

int main () {
std::string path_;
std::cout << " Enter the path ";
std::cin >> path_;

auto dir_path = path(path_);

for (auto it = directory_iterator(dir_path); it != directory_iterator(); ++it)
{
    const auto& file = it->path();
    std::cout << " path : " << file << std::endl;

    if (is_directory (status(it->path()))) 
        std::cout << " It is a directory. " << std::endl;
    else 
        std::cout << " It is not a directory. " << std::endl;
}
_getch();
return 0;
}

http://msdn.microsoft.com/en-us/library/hh874754.aspx

Кроме того, могу ли я использовать документацию по файловой системе boost, чтобы использовать ее в качестве учебного пособия, поскольку нет хорошей документации относительно того, что есть что и как ее использовать.

2 ответа

Решение

Хорошо, проблема была исправлена ​​после того, как я обновил Visual Studio первым крупным обновлением.

if (is_directory (status(dir_path)) )

Да, вы используете это неправильно. Попробуйте протестировать файл, а не dir_path. Вы уже знаете, что dir_path - это каталог.

Другие вопросы по тегам