Ответ 1
Существует несколько отличий. Некоторые из них, я считаю, усиливают изменения, которые никогда не распространялись. Например, нет запроса path.filename_is_dot()
(как обсуждается ниже, это было бы менее полезно в std::filesystem
) в любом случае.
На этом фронте также были хорошие новости:
- Поддержка не-POSIX-подобных файловых систем:
- Укажите, является ли строка ОС-родной или POSIX-подобной (или разрешить реализации, которая (по-прежнему) по умолчанию)
- Реализация может определять дополнительные типы файлов (помимо обычных, директорий, сокетов и т.д.).
- Реализация может определить
file_size
для каталога или файла устройства
-
filename()
, нормализация и относительные/абсолютные преобразования переопределены (примеры для POSIX):-
path("foo/.").lexically_normal()=="foo/"
(противоположно в Boost) -
path("foo/").filename()==""
(естьpath(".")
в Boost) -
remove_filename()
оставляет конечную косую черту и, следовательно, является идемпотентным (он назначаетparent_path()
в Boost) -
path(".profile").extension()==""
(это полное имя в Boost) -
path
Разложения и комбинации могут сохранять такие вещи, как альтернативные имена потоков данных, которые обычно невидимы -
path("foo")/"/bar"=="/bar"
(естьpath("foo/bar")
в Boost), что позволяет составлять относительные имена файлов с другими (абсолютными или относительными) и заменяет Boostabsolute()
- Boost
system_complete()
(который принимает только один аргумент) переименовывается вabsolute()
-
canonical()
, таким образом, принимает только один аргумент (фиксированный в DR) -
lexically_relative()
правильно обрабатывает..
и корневые элементы -
permissions()
принимает больше аргументов (Boost объединяет их в битовую маску)
-
Обратите внимание, что Boost.Filesystem v4 находится в разработке и должен быть совместим с С++ 17 (но, следовательно, несовместим во многих отношениях с v3).