Временный путь к файловой системе C Boost, добавленный к файлу, не существует

#c

Вопрос:

У меня есть класс, который принимает строковый путь в своем конструкторе:

 class S
{
public:
    S(const std::stringamp; path)
    {
        assert(std::filesystem::exists(path));
    }
};
 

Я хочу провести модульное тестирование этого, используя путь, который существует только временно.

Похоже, единственный способ создать уникальную временную папку-это использовать boost::filesystem :

 TEST(MyTest)
{
    using bf = boost::filesystem;

    const bf::path tempPath = bf::unique_path() /= bf::path("file.txt");

    std::ofstream(tempPath.string(), std::ios::out | std::ios::binary);

    S s(tempPath.string());
}
 

Однако утверждение срабатывает, потому что этот путь не существует.

Я злоупотребляю этим, или есть правильный способ сделать это?

Комментарии:

1. Я не boost::filesystem очень хорошо знаю, но bf::unique_path() /= bf::path("file.txt"); выглядит неправильно. Я бы ожидал bf::unique_path() / bf::path("file.txt"); или просто bf::unique_path() / "file.txt"; — Отредактировал: Нет. Кажется, это правильный способ добавления к пути в boost::filesystem

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

3. @Someprogrammerdude Я думал, что unique_path — это создание уникального временного каталога? Я не хочу явно создавать папку, мне просто нужна любая временная папка, поместите туда мой файл, и он будет удален после теста.

4. @user997112 Нет, только имя. » unique_path Функция генерирует имя пути, подходящее для создания временных файлов, включая каталоги »

5. @user997112 Я еще так далеко не заходил 🙂 Если нет — просто инкапсулируйте его в класс RAII. Правка: У меня болит голова каждый раз, когда я пытаюсь читать boost документацию. :-/ Я бы сделал обертку, чтобы удалить файл после использования.