Ошибка boost :: filesystem :: create_directories (& quot;. & quot;)

boost::filesystem::create_directories(".") всегда терпит неудачу в моей системе. Кажется, что это может быть ошибкой, но после прочтения документации я не совсем уверен. Вот пример программы:

#include <iostream>
#include <boost/filesystem.hpp>

int main(int argc, char* argv[])
try
{
namespace fs = boost::filesystem;
std::cerr << "is_directory: " << fs::is_directory(argv[1]) << '\n';
std::cerr << "create_directory: " << fs::create_directory(argv[1]) << '\n';
std::cerr << "create_directories: " << fs::create_directories(argv[1]) << '\n';
}
catch (const std::exception& ex)
{
std::cerr << ex.what() << '\n';
}

Если я запускаю это с аргументом . (имеется в виду текущий каталог), он печатает:

is_directory: 1
create_directory: 0
boost::filesystem::create_directories: Invalid argument

Первые две строки не удивляют: . это каталог, и create_directory() задокументировано высказывание:

Ошибка создания, поскольку p разрешает существующий каталог, не должна рассматриваться как ошибка.

Но третья строка меня удивляет: create_directories(".") не удалось, хотя . существует. Нет такой ошибки, если вы используете другое имя, например foo — он с радостью создаст этот каталог или просто вернет false, если он уже существует.

Документы имеют это, чтобы сказать:

Эффект: устанавливает постусловие, вызывая create_directory () для любого элемента p, который не существует.

Постусловие: is_directory (p)

Мы показали, что постусловие заранее верно, так почему же оно терпит неудачу?

Редактировать: я использую Boost 1.63. Теперь я вижу, что фиксация «Fix # 12495» три месяца назад, вероятно, вызывает эту проблему: https://github.com/boostorg/filesystem/commit/216720de55359828c2dc915b50e6ead44e00cd15 — и даже включает в себя модульный тест, который требует, чтобы create_directories(".") должен потерпеть неудачу в то время как create_directory(".") должен преуспеть, что странно.

5

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]