2017-01-16 8 views
0
#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 :: experimental :: filesystem :: path не принимает подстановочные знаки типа «*»?

terminate called after throwing an instance of 'std::experimental::filesystem::v1::__cxx11::filesystem_error'
what(): filesystem error: cannot canonicalize: No such file or directory [/usr/include/c++/../sys/*] [/data/svn/yaoxinliu] Aborted

Почемуstd::experimental::filesystem::pathне принимает групповые символы, такие как*?

+2

Принципиально для дизайна, что путь соответствует одному файлу, а не произвольному набору файлов. –

ответ

3

Согласно documentation

std::experimental::filesystem::canonical converts path p to a canonical absolute path, i.e. an absolute path that has no dot, dot-dot elements or symbolic links.

С std::experimental::filesystem::canonical должен также разыменованиями символических ссылок, содержащихся в пути он может принимать только пути существующих файлов или каталогов.