2017-02-09 7 views
0

Я хочу проверить путь от входа пользователя. Вход должен содержать путь к файлу, который не существует. Кроме того, если ввод также предоставляет каталоги, эти каталоги должны существовать.boost :: filesystem :: path.parent_path() и whitespace

Пример входа:

/existent_dir_a/existent_dir_b/existent_file.bin < - ложные

/existent_dir_a/existent_dir_b/non_existent_file.bin < - ок

/non_existent_dir_a/non_existent_file.bin < - ложные

non_existent_file.bin < - нормально

existent_file.bin < - false

В приведенном ниже примере показан пример. Надеюсь, что он будет архивировать мою цель, но у меня есть еще один вопрос.

Как я могу избавиться от output.parent_path().string().size() != 0, поскольку он кажется немного уродливым для меня?

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

namespace fs = boost::filesystem; 

int main(int ac, char ** av) 
{ 
    fs::path output(av[1]); 

    std::cout << output << std::endl; 

    std::cout << output.parent_path() << std::endl; 

    if (fs::exists(output)) 
    { 
    std::string msg = output.string() + " already exists"; 

    throw std::invalid_argument(msg); 
    } 

    if (output.parent_path().string().size() != 0 && 
     !fs::exists(output.parent_path())) 
    { 
    std::string msg = output.parent_path().string() + " is not a directory"; 

    throw std::invalid_argument(msg); 
    } 
} 

ответ

5

Использование !output.parent_path().empty()