C++ 不同行为的<;文件系统>;VS2013与VS2012

C++ 不同行为的<;文件系统>;VS2013与VS2012,c++,visual-studio-2012,visual-studio-2013,std,C++,Visual Studio 2012,Visual Studio 2013,Std,在此测试程序中,VS2012更新4和VS2013更新1的行为有所不同: #include "stdafx.h" #include <iostream> #include <string> #include <filesystem> using namespace std; using namespace std::tr2::sys; void main() { string s("C:\\"); for (auto i = directory_i

在此测试程序中,VS2012更新4和VS2013更新1的行为有所不同:

#include "stdafx.h"
#include <iostream>
#include <string>
#include <filesystem>

using namespace std;
using namespace std::tr2::sys;

void main()
{
  string s("C:\\");

  for (auto i = directory_iterator(path(s).parent_path()); i != directory_iterator(); ++i) 
    cout << (path(s).parent_path()/i->path()).string() << endl;
}
VS2013生产:

C:AUTOEXEC.BAT
...
C:C:AUTOEXEC.BAT
...

哪些行为符合C++标准?< /P> 编辑


自从代码>文件系统< /代码>还没有在C++标准中,但它只是A,我重新表述了我的问题:VS2013行为是一个bug吗?p> 我相信这是VC++2012中的一个bug。这是一篇文章的摘录

的目录迭代器返回的路径太多 短(DevDiv#411531)。(请注意,递归目录迭代器工作正常 正确。)我们将目录迭代器固定在N1975之后 文件系统V2草稿。(文件系统V3在我们的雷达上,但不会 2013年实施RTM。)


你可以找到。

我相信这是VC++2012中的一个bug。这是一篇文章的摘录

的目录迭代器返回的路径太多 短(DevDiv#411531)。(请注意,递归目录迭代器工作正常 正确。)我们将目录迭代器固定在N1975之后 文件系统V2草稿。(文件系统V3在我们的雷达上,但不会 2013年实施RTM。)


您可以发现。

该标准不包括
文件系统
(但无论如何),因此两者都不是特别兼容(尽管
C:C:
看起来确实像一个bug——我无法想象它的预期行为)。除了Jerry Coffin的评论之外,未来的标准文件系统库或多或少将基于(VS也是基于它的),它提供了一个比VS更稳定、更有文档记录的API。但是,正如我所经历的,它仍然不支持VS 2013(因为它依赖于其他一些也不支持的Boost组件),而VS 2013在构建和内置时会抛出编译错误。该标准不包括
文件系统
(然而,无论如何)这两者都不是特别兼容(尽管
C:C:
看起来确实像个bug——我无法想象它的预期行为)。除了Jerry Coffin的评论之外,未来的标准文件系统库或多或少也将基于它(VS也基于它),它提供了比VS更稳定、更有文档记录的API。但是,正如我所经历的,它仍然不支持VS 2013(因为它依赖于其他一些也不支持的Boost组件)这听起来很熟悉:我隐约记得,与VS2012相比,
recursive\u directory\u iterator
的不同行为让我感到困惑,而且获得简单文件路径的复杂性也不必要。这听起来很熟悉:我隐约记得自己很困惑与VS2012中的
目录迭代器
相比,
递归目录迭代器
的行为不同,并且获得简单文件路径的复杂性不必要。