2016-11-22 184 views
2

boost::filesystem::path使用&逃生路径字符串引号,see demo为什么路径转义字符与boost :: filesystem :: path和std :: filesystem :: path不同?

std::cout << boost::filesystem::path("/R&D/Project \"boost\"") << std::endl; 

打印"/R&&D/Project &"boost&""。但是,对于std::filesystem::pathI see this

在路径p上执行流输入或输出。使用std :: quoted,以便稍后通过流输入运算符读取空格时不会截断。

这里是std::quoted

逃生 - 作为转义字符使用的字符,默认为\

从这个我可以告诉大家,std::filesystem::path将使用\代替&

这是正确的吗?如果是,为什么委员会决定改变这种行为?

奖金问题:有没有std::filesystem::path的实现可用?似乎没有最新的GCC和clang提供<filesystem>标题。

回答

1

如果是,为什么委员会决定改变这种行为?

N3399,强调的是矿:

升压插入器输出引用的字符串,其由提取承认。 文件系统研究组中提供了一个引用和/或转义的字符串操作符作为字符串扩展的情况,这是比路径特定的功能更好的解决方案。见提案N3431,引用字符串库的建议。

也就是说,文件系统研究小组认为这是更好地使用quoted字符串操纵比path

奖金问题的特定功能:在那里的std ::文件系统路径的任何::可以实现?似乎没有最新的GCC和clang提供标题。

AFAIK,主要的编译器等克++,铛,MSVC既提供filesystem作为命名空间std::experimental::filesystem实验性功能与<experimental/filesystem>。 gcc从版本5开始。3,你可以看到here,MSVC有它从VS2012(它在VS2012和VS2013 <filesystem>,然后移动到<experimental/filesystem><filesystem>在VS2015)

+0

大,感谢您的报价!至于实验,我在网上编译器尝试过,但没有成功:http://melpon.org/wandbox/permlink/nfZ88PnrttOGbEHu也许它只是在线编译器的一个问题。 – Mikhail

+1

@Mikhail As Jonathan在[这个答案](http://stackoverflow.com/a/33159746/4115625)中提到过,你必须将它与'-lstdC++ fs'联系起来。参见[this](http:// melpon .org/wandbox/permlink/75pJtT4K3dAgGT1i) – Danh

+0

很酷,非常感谢! – Mikhail

1

Boost :: Filesystem相当陈旧,并且早于C++ 14的quoted。标准在内部一致是完全合理的。继Boost之后只是次要的问题。

相关问题