Я написал MCVE для себя.Когда путь не существует, boost выдает
terminate called after throwing an instance of 'boost::filesystem::filesystem_error'
what(): boost::filesystem::create_directory: No such file or directory
Aborted (core dumped)
, потому что ваша программа сначала проверяет, является ли путь каталогом, а затем проверяет, существует ли путь (правильный).
Когда путьсуществует и является каталогом, программа работает без вывода и ничего не делает (правильно).
Если путь существует и является файлом, boost выдает
terminate called after throwing an instance of 'boost::filesystem::filesystem_error'
what(): boost::filesystem::create_directory: File exists
Aborted (core dumped)
, поскольку не можетсоздайте каталог (правильно).
Следовательно, ваш фрагмент делает то, что должен делать.Возможно, вам следует изменить порядок в вашем операторе if
и добавить проверку к вашему else
:
#include <boost/filesystem.hpp>
#include <iostream>
class server {
public:
server(boost::filesystem::path mappath) : mappath(mappath) {
if(boost::filesystem::exists(mappath) && boost::filesystem::is_directory(mappath)) {
// Do some stuff here
} else if (!boost::filesystem::exists(mappath)) {
boost::filesystem::create_directory(mappath);
}
}
private:
boost::filesystem::path mappath;
};
int main() {
server s("/path/test");
return 0;
}
Теперь программа проверяет, существует ли путь.Если путь существует, программа проверяет, является ли путь каталогом.Если путь не существует, каталог создается.