我需要一个文件系统库来与支持 C++11 的编译器或支持 C++14 的编译器一起使用 - 所以它不能来自 C++17。
现在,我知道进入 C++17 的文件系统库是基于 Boost::Filesystem;但是 - 它们是否足够相似,让我可以使用 Boost 库,然后在以后无缝切换到标准版本,而无需更改超过,例如 using
语句?或者两者之间是否存在(微小/重大)差异?我知道对于 variant
的情况,Boost 和标准库的版本差别很大。
最佳答案
有许多不同之处。我相信有些是从未传播过的 Boost 更改。例如,没有 path.filename_is_dot()
查询(如下所述,无论如何它在 std::filesystem
中的用处不大)。
在这方面还有一个很好的最新消息:
- 支持non-POSIX-like filesystems :
- 指定字符串是操作系统原生的还是类似 POSIX 的(或者让实现来决定,这(仍然)是默认值)
- 一个实现可以定义其他文件类型(除了常规、目录、套接字、等)
- 实现可以为目录或设备文件定义
file_size
-
filename()
, normalization, and relative/absolute conversions redefined (POSIX 的示例):path("foo/.").lexically_normal()=="foo/"
(在 Boost 中是相反的)path("foo/").filename()==""
(在 Boost 中是path(".")
)remove_filename()
留下斜杠,因此是幂等的(它在 Boost 中分配parent_path()
)path(".profile").extension()==""
(是Boost中的全称)path
分解和组合可以保留 alternate data stream names 等内容通常是不可见的path("foo")/"/bar"=="/bar"
(在 Boost 中是path("foo/bar")
),它允许将相对文件名与其他文件名(绝对或相对)组合并替换 Boost 的absolute()
- Boost 的
system_complete()
(只接受一个参数)被重命名为absolute()
canonical()
因此只接受一个参数(固定在 DR 中)lexically_relative()
正确处理..
和根元素permissions()
接受更多参数(Boost 将它们组合成一个位掩码)
注意 Boost.Filesystem v4 是 under development并且应该与 C++17 兼容(但因此在许多方面与 v3 不兼容)。
关于c++ - Boost.Filesystem 和 C++ 标准文件系统库有多相似?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40899267/