VS2012中的is_directory()为偶数目录返回false

时间:2012-12-14 11:07:55

标签: c++ visual-studio-2012 c++-tr2

我正在浏览包含多个子目录的目录。我正在使用recursive_directory_iterator。我有目录asr-> collections->(多个目录和几个文本文件)

#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-directory为所有内容返回false。 我错了吗?我已将以下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 个答案:

答案 0 :(得分:2)

if (is_directory (status(dir_path)) )

是的,你错了。尝试测试文件,而不是dir_path。您已经知道dir_path是一个目录。

答案 1 :(得分:1)

好的,我在使用第一次重大更新更新Visual Studio后问题得到解决。