C ++ экспериментальная библиотека файловой системы неполная? - PullRequest
0 голосов
/ 02 февраля 2020

Я нашел аккуратный метод внутри <experimental/filesystem> include, который сообщает my, является ли путь файлом или каталогом, но выдает ошибку при попытке использовать его в g ++ v 7.4.0. Метод, который я пытаюсь использовать: .is_regular_file().

Это даже на cppref, https://en.cppreference.com/w/cpp/experimental/fs/is_regular_file.

Но при компиляции я получаю "... имеет нет члена с именем is_regular_file ". Я не могу использовать обычную файловую систему, потому что моя целевая система (Ubuntu 18.04 LTS) имеет предустановленный g ++ 7.4.0 и не может быть изменена.

Есть идеи, что я делаю неправильно? Кто-нибудь знает альтернативу is_regular_file для меня, чтобы я мог проверить, является ли файл каталогом или файлом?

Мои включения:

#include <string>
#include <vector>
#include <experimental/filesystem>

И я использую следующие флаги: - std = c ++ 17 -lstdc ++ fs -O3 -Wall -Wextra -Wpedanti c -Werror

1 Ответ

1 голос
/ 02 февраля 2020

Вы сбиты с толку, потому что std::experimental::filesystem (<experimental/filesystem>) содержит TS файловой системы, а не дополнения файловой системы к C ++ 17, которые можно найти в std::filesystem (<filesystem>), если ваша стандартная библиотека реализует их (хотя последний основан на первом).

В TS есть свободная функция std::experimental::filesystem::is_regular_file (на которую вы ссылаетесь в вопросе). Этот бесплатный std::filesystem::is_regular_file также существует в C ++ 17.

Однако в C ++ 17 класс std::filesystem::directory_entry также имеет функцию-член is_regular_file.

Эта функция-член отсутствует в версии TS std::experimental::filesystem::directory_entry.

TS не совсем то, что потом было добавлено в стандартную библиотеку для C ++ 17.

...