Проблема с boost path
От: cozy Украина  
Дата: 17.11.06 15:05
Оценка:
Расскажите как побороть такую проблему:

    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);

Но меня не устраивает такое решение. Может кто-нибудь подскажет другое?
Re: Проблема с boost path
От: Peregrin  
Дата: 17.11.06 15:18
Оценка:
А так?
boost::filesystem::path::default_name_check(boost::filesystem::native);
Re[2]: Проблема с boost path
От: cozy Украина  
Дата: 17.11.06 15:33
Оценка:
Здравствуйте, Peregrin, Вы писали:

P>А так?

P>
boost::filesystem::path::default_name_check(boost::filesystem::native);

Спасибо, помогло

А нет ли способа обойтись вообще без вызова default_name_check?
Re[3]: Проблема с boost path
От: Peregrin  
Дата: 17.11.06 16:16
Оценка:
Здравствуйте, cozy, Вы писали:

C>А нет ли способа обойтись вообще без вызова default_name_check?


Если я правильно понял документацию — если нет явного вызова default_name_check, то в качестве чекера используется portable_name. Поэтому единственный способ обойтись без default_name_check — использовать только такие имена файлов, которые будут проходить валидацию чекером portable_name
Re[4]: Проблема с boost path
От: cozy Украина  
Дата: 17.11.06 16:32
Оценка:
Здравствуйте, 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;
Re[5]: Проблема с boost path
От: Peregrin  
Дата: 17.11.06 16:44
Оценка:
Здравствуйте, 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?
Re[6]: Проблема с boost path
От: cozy Украина  
Дата: 17.11.06 16:54
Оценка:
Здравствуйте, Peregrin, Вы писали:

P>А, ну да, так тоже можно. Но если во все конструкторы будет передаваться один и тот же чекер — то почему его не установить в самом начале с помощью default_name_check?


Потому что код пишет для библиотеки. Не хотелось бы ее пользователям преподносить неожиданный сюрпрайз, если не дай бог где-нибудь ожидается иной дефолтный чекер
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.