为什么std :: experimental :: filesystem :: path不接受像“*”这样的通配符?

时间:2017-01-16 05:16:54

标签: c++ filesystems standards c++17

#include <string>
#include <iostream>
#include <experimental/filesystem>

namespace fs = std::experimental::filesystem;

int main()
{
    fs::path p("/usr/include/c++/../sys/*");
    p = fs::canonical(p);
}

gcc 6.2.0编译好了,但运行时错误说:

  

在抛出一个实例后终止调用   '的std ::实验::文件系统:: V1 :: __ cxx11 :: filesystem_error'
  what():filesystem错误:无法规范化:没有这样的文件或   目录[/usr/include/c++/../sys/*] [/ data / svn / yaoxinliu]已中止

为什么 std::experimental::filesystem::path 不接受 * 这样的通配符?

1 个答案:

答案 0 :(得分:3)

根据documentation

  

std::experimental::filesystem::canonical将路径p转换为规范的绝对路径,即没有点,点点元素或符号链接的绝对路径。

由于std::experimental::filesystem::canonical还必须取消引用路径中包含的符号链接,因此它只能接受现有文件或目录的路径。