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

Posted

技术标签:

【中文标题】VS2012 中的 is_directory() 对偶数目录返回 false【英文标题】:is_directory () in VS2012 returning false for even directories 【发布时间】:2012-12-14 11:07:55 【问题描述】:

我正在运行一个包含多个子目录的目录。我正在使用 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 URL。

我安装了 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 文件系统文档作为教程,因为没有关于什么是什么以及如何使用它的好的文档。

【问题讨论】:

Boost 文档here 适用于VC++ 2012 和2013; Boost 文档here 适用于 VC++ 2015。(请注意,这些是 Boost.Filesystem 的不同版本。) 【参考方案1】:
if (is_directory (status(dir_path)) )

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

【讨论】:

我将其更改为 if(is_directory(status(file))。我还添加了 else 块,调用它不是目录。现在只有 else 块被调用。 我用 boost 试过了。有效。但它不适用于微软的实现。【参考方案2】:

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

【讨论】:

以上是关于VS2012 中的 is_directory() 对偶数目录返回 false的主要内容,如果未能解决你的问题,请参考以下文章

VS2012 与 Fxcop 中的代码分析

VS 2012 中的条件运算符类型转换

VS 2012 中的分析

VS2012中的内存分析现有进程

VS2012 中的 strtof() 在哪里?

VS2012 Team Explorer 中的“Filter By Solution”按钮在哪里?