![](/img/trans.png)
[英]Native path separator bug in C++17 std::filesystem::path?
[英]Differences between c++14 std::experimental::filesystem::v1 and c++17 std::filesystem?
我找到了這個頁面,描述了 c++14 和 c++17 之間的變化:
https:\/\/isocpp.org\/files\/papers\/p0636r0.html<\/a>
...它鏈接到此頁面,該頁面描述了建議的文件系統更改:
http:\/\/www.open-std.org\/jtc1\/sc22\/wg21\/docs\/papers\/2016\/p0218r0.html<\/a>
我瀏覽了一下。 標准有一些小的措辭更改,但我看到的唯一代碼更改是命名空間更改,刪除了“實驗”和“v1”部分,因此“std::experimental::filesystem::v1”變成了“std::filesystem ",這是意料之中的。
據我所知,除了命名空間路徑沒有任何變化。 有誰知道是否還有其他變化?
對文件系統庫進行更改的主要論文是
directory_entry
還有一些相對較小的修復和更改可以在LWG問題列表中找到 。 查找“C ++ 17”狀態的問題。 請注意,其中一些更改將被上面列出的文件取代。
對於現有的Filesystem TS代碼,我希望P0492R2是最重要的,因為剩下的論文主要是功能增加而不是更改。 P0492R2包括技術說明和重要的語義變化。 后一類中的一些立即浮現在腦海中的是:
path(".profile").stem()
現在是".profile"
operator/
on path
的語義會發生顯着變化。 path("/foo") / "/bar"
現在是"/bar"
而不是"/foo/bar"
; Windows上的path("C:\\\\x") / "D:y"
現在是"D:y"
。 absolute
消失了。 system_complete
已重命名為absolute
。 permissions
的簽名發生了微小的變化。 延遲回復,但是當我自己尋找同一問題的答案時,我遇到了這個問題。 當我終於弄清楚事情時,我想我會在這里發表我的觀察。
從std::experimental::filesystem
遷移到std::filesystem
時,我遇到了以下更改:
# | c++14 std::experimental::filesystem |
c++17 std::filesystem |
---|---|---|
1 | canonical() 具有接受基本路徑的重載,可用於解析第一個參數中傳遞的路徑 |
canonical() 沒有這個重載,這破壞了我的一些代碼 |
2 | canonical() 不檢查路徑是否存在 |
canonical() 確實檢查路徑是否存在,因此如果在調用此函數時遇到路徑可能不存在的情況,請切換到std::filesystem::weakly_canonical |
3 | 插入運算符 ( << ) 為您提供不帶引號和未轉義的字符串。 例如C:\\my\\file.txt |
插入運算符 ( << ) 在完整路徑周圍添加引號並轉義反斜杠 ( \\ )。 例如"C:\\\\my\\\\file.txt" 這打破了我的一些測試,我不得不調用路徑對象的string (或wstring )方法來獲取未加引號和未轉義的字符串。 |
4 | file_time_type 是std::chrono::system_clock::time_point 的typedef |
file_time_type 是std::chrono::time_point<filesystem::_File_time_clock> 的別名。 這導致了我的代碼中某些地方的編譯錯誤,我期望它是system_clock::time_point 。 |
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.