Проверьте, относится ли путь к каталогу, даже если он не существует - PullRequest
0 голосов
/ 20 апреля 2020

Мне нужно иметь возможность различать guish два случая в утилите командной строки:

  1. Пользователь указал выходной каталог (-o output/): создайте файл с именем output/file.ext
  2. Пользователь указал выходной файл (-o output): создайте файл с именем output

Как правильно в C ++ 17 определить, что output/ или output\ - это путь к каталогу , даже если каталог output не существует ?

Свободная функция std::filesystem::is_directory() возвращает false, если каталог не существует.

Проверяет, что std::filesystem::path::has_filename() возвращает ложь, надежно?

Редактировать: уточненный вариант использования на основе комментариев.

1 Ответ

0 голосов
/ 20 апреля 2020

Это невозможно даже теоретически, поскольку, если пользователь указал путь, последний элемент которого не существует, он может быть создан либо в виде файла, либо в виде каталога.

Однако вы можете проверить особый случай пути, заканчивающегося разделителем каталогов (std::path::preferred_separator), который может иметь место только для каталогов, а не для обычных файлов. Это довольно легко сделать.

...