filename()函数也要看情况。如果构建path的时候字符串是以/结尾的, 那就输出空;否则输出最后一个目录的名字。如:
filesystem::path p("/Users/parcool/temp/cursor/");
cout << p.filename() << endl; // 输出:null
filesystem::path p("/Users/parcool/temp/cursor");
cout << p.filename() << endl; // 输出:cursor
不过原因也很简单,因为如果你以不带/结尾的字符串构建path的时候,没有任何人能知道它是真的指向一个文件还是一个目录,所以它就默认把它当作一个文件来处理了。
relative与lexically_relative函数的区别。
filesystem::path p("/Users/parcool/Library/Group Containers/group.com.venyore.ps/Raw/files");
filesystem::path p2("/Users/parcool/Library/Group Containers/group.com.venyore.ps/Raw/");
//如果files是普通文件的话,那没区别:
cout << filesystem::relative(p, p2) << endl; // 输出:files
cout << p.lexically_relative(p2) << endl; // 输出:files
//如果files是一个软连接的话,那就有区别了:relative会解析;lexically_relative不会解析
cout << filesystem::relative(p, p2) << endl; // 输出它真实指向的文件路径:A/B/files
cout << p.lexically_relative(p2) << endl; // 输出:files