Расскажите как побороть такую проблему:
try
{
boost::filesystem::path p1("D:\\Tools", boost::filesystem::no_check);
boost::filesystem::path p3("", boost::filesystem::no_check);
p3 = p1 / std::string("!1.exe");
}
catch (std::exception& e)
{
std::cout << e.what();
}
Вылетает эксепшн, что плохое имя "!1.exe". В виндовс ХР.
Пока помогает только вызов
boost::filesystem::path::default_name_check(boost::filesystem::no_check);
Но меня не устраивает такое решение. Может кто-нибудь подскажет другое?
А так?
boost::filesystem::path::default_name_check(boost::filesystem::native);
Здравствуйте, Peregrin, Вы писали:
P>А так?
P>boost::filesystem::path::default_name_check(boost::filesystem::native);
Спасибо, помогло
А нет ли способа обойтись вообще без вызова default_name_check?
Здравствуйте, cozy, Вы писали:
C>А нет ли способа обойтись вообще без вызова default_name_check?
Если я правильно понял документацию — если нет явного вызова default_name_check, то в качестве чекера используется portable_name. Поэтому единственный способ обойтись без default_name_check — использовать только такие имена файлов, которые будут проходить валидацию чекером portable_name
Здравствуйте, Peregrin, Вы писали:
P>Здравствуйте, cozy, Вы писали:
C>>А нет ли способа обойтись вообще без вызова default_name_check?
P>Если я правильно понял документацию — если нет явного вызова default_name_check, то в качестве чекера используется portable_name. Поэтому единственный способ обойтись без default_name_check — использовать только такие имена файлов, которые будут проходить валидацию чекером portable_name
решение все-таки нашлось
Заключается в том, чтобы для каждого элемента пути, который участвует в этой операции, создать стековый объект с необходимым чекером
boost::filesystem::path p1("D:\\Tools", boost::filesystem::native);
boost::filesystem::path p3("!1.exe", boost::filesystem::native);
boost::filesystem::path p2 = p1 / p3;
Здравствуйте, cozy, Вы писали:
C>Здравствуйте, Peregrin, Вы писали:
P>>Здравствуйте, cozy, Вы писали:
C>>>А нет ли способа обойтись вообще без вызова default_name_check?
P>>Если я правильно понял документацию — если нет явного вызова default_name_check, то в качестве чекера используется portable_name. Поэтому единственный способ обойтись без default_name_check — использовать только такие имена файлов, которые будут проходить валидацию чекером portable_name
C>решение все-таки нашлось Заключается в том, чтобы для каждого элемента пути, который участвует в этой операции, создать стековый объект с необходимым чекером
C>C> boost::filesystem::path p1("D:\\Tools", boost::filesystem::native);
C> boost::filesystem::path p3("!1.exe", boost::filesystem::native);
C> boost::filesystem::path p2 = p1 / p3;
C>
А, ну да, так тоже можно. Но если во все конструкторы будет передаваться один и тот же чекер — то почему его не установить в самом начале с помощью default_name_check?