![](/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.