Boost.Filesystem和C ++标准文件系统库有何相似之处?

问题描述 投票:26回答:2

我需要一个文件系统库来与具有C ++ 11的编译器或具有C ++ 14的编译器一起使用-因此它不能来自C ++ 17。

现在,我知道进入C ++ 17的文件系统库基于Boost :: Filesystem;但是-它们是否足够相似,以至于我可以使用Boost库,然后在以后的时间无缝切换到标准版本,而无需更改using语句?还是两者之间有(轻微/重大)差异?我知道在variant的情况下,Boost和标准库版本存在很大差异。

c++ c++11 c++17 c++-standard-library boost-filesystem
2个回答
19
投票

存在许多差异。我相信其中一些是从未传播的Boost更改。例如,没有path.filename_is_dot()查询(如下所述,无论如何它在std::filesystem中的用处不大)。

[在这方面也有很多最新新闻:

  1. 支持non-POSIX-like filesystems
    • 指定字符串是OS原生还是类似POSIX的字符串(或让实现决定,(仍然是默认值))
    • 一个实现可以定义其他文件类型(除了常规文件,目录,套接字,
    • 一个实现可以为目录或设备文件定义file_size
  2. filename(), normalization, and relative/absolute conversions redefined(POSIX的示例):
    • filename()(在Boost中是相反的)
    • [path("foo/.").lexically_normal()=="foo/"(在Boost中是path("foo/").filename()=="")] >>
    • [path(".")离开斜杠,因此是幂等的(它在Boost中分配了remove_filename()
    • parent_path()(Boost中的全名)
    • [path(".profile").extension()==""分解和组合可以保留通常不可见的path之类的东西
    • [alternate data stream names(在Boost中为path("foo")/"/bar"=="/bar"),它允许与其他文件名(绝对或相对)组成相对文件名,并替换Boost的path("foo/bar")
    • Boost的absolute()(仅接受一个参数)重命名为system_complete()
    • [absolute()因此仅接受一个参数(固定在canonical()中)]
    • [DR正确处理lexically_relative()和根元素
    • ..接受更多参数(Boost将它们组合成一个位掩码)
  3. 请注意,Boost.Filesystem v4是permissions(),应该与C ++ 17兼容(但因此在许多方面与v3不兼容。


6
投票

注意:

© www.soinside.com 2019 - 2024. All rights reserved.