我需要一个文件系统库来与具有C ++ 11的编译器或具有C ++ 14的编译器一起使用-因此它不能来自C ++ 17。
现在,我知道进入C ++ 17的文件系统库基于Boost :: Filesystem;但是-它们是否足够相似,以至于我可以使用Boost库,然后在以后的时间无缝切换到标准版本,而无需更改using
语句?还是两者之间有(轻微/重大)差异?我知道在variant
的情况下,Boost和标准库版本存在很大差异。
存在许多差异。我相信其中一些是从未传播的Boost更改。例如,没有path.filename_is_dot()
查询(如下所述,无论如何它在std::filesystem
中的用处不大)。
[在这方面也有很多最新新闻:
file_size
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
之类的东西path("foo")/"/bar"=="/bar"
),它允许与其他文件名(绝对或相对)组成相对文件名,并替换Boost的path("foo/bar")
absolute()
(仅接受一个参数)重命名为system_complete()
absolute()
因此仅接受一个参数(固定在canonical()
中)]lexically_relative()
和根元素..
接受更多参数(Boost将它们组合成一个位掩码)请注意,Boost.Filesystem v4是permissions()
,应该与C ++ 17兼容(但因此在许多方面与v3不兼容。
注意: