2016-11-22 54 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之後只是次要的問題。

相關問題