Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Нехороший boost::filesystem 
:(
    Опции темы
Randajad
Дата 22.6.2012, 19:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 295
Регистрация: 15.3.2012

Репутация: 8
Всего: 8



Сабж!
Ну не работает оно.

Код

int main() {
   boost::filesystem::exists("FFFFFFFUUUUUUUUUUU");
}


Делает:
terminate called after throwing an instance of 'boost::filesystem::filesystem_error'
  what():  boost::filesystem::status: The operation completed successfully: "FFFFFFFUUUUUUUUUUU"

Вот надыбал темку, девелопер самого буста вроде как пишет, что низзя его использовать и пиши велосипеды.
http://boost.2283326.n4.nabble.com/filesys...-td2585957.html

Any ideas?
PM MAIL   Вверх
boostcoder
Дата 22.6.2012, 22:59 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Randajad, какой смысл носит твой пост?
ты создал баг-репорт? - где ссылка него?
ты пофиксил проблему? - где описание решения или патч?
ты понял в чем проблема, но не знаешь как пофиксить? - где описание понятой_проблемы?

о чем ты вообще?! smile 
PM WWW   Вверх
alexvs11
Дата 22.6.2012, 23:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


hell is here
**


Профиль
Группа: Участник
Сообщений: 518
Регистрация: 21.8.2010

Репутация: 6
Всего: 10



в доке написано
Цитата

May throw exceptions

Unless otherwise specified, Boost.Filesystem functions throw basic_filesystem_error exceptions if they cannot successfully complete their operational specifications. Also, implementations may use C++ Standard Library functions, which may throw std::bad_alloc. These exceptions may be thrown even though the error condition leading to the exception is not explicitly specified in the function's "Throws" paragraph

не?
PM MAIL   Вверх
Dem_max
Дата 23.6.2012, 09:26 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 4
Всего: 39



Ну да не работает  smile 


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
Randajad
Дата 23.6.2012, 09:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 295
Регистрация: 15.3.2012

Репутация: 8
Всего: 8



О том, что эта функция должна возвращать булевое значение, а не кидать эксепшены.

Я пробовал также:
Код

boost::system::error_code ec;
boost::filesystem::exists("FFFFFFFUUUUUUUUUUU", ec);


Оно все-равно кидает их.
PM MAIL   Вверх
boostcoder
Дата 23.6.2012, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Randajad, ОС? версия буста? версия компилятора?

PM WWW   Вверх
alexvs11
Дата 23.6.2012, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


hell is here
**


Профиль
Группа: Участник
Сообщений: 518
Регистрация: 21.8.2010

Репутация: 6
Всего: 10



Цитата(Randajad @  23.6.2012,  09:36 Найти цитируемый пост)
О том, что эта функция должна возвращать булевое значение, а не кидать эксепшены.

я чегото не понимаю, в приведенной мною цитатой не сказано, что все функции boost.filesystem могут кидать исключения, даже если это в отдельности не оговорено?
PM MAIL   Вверх
boostcoder
Дата 23.6.2012, 16:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Randajad, але!

ОС? версия буста? версия компилятора?

PM WWW   Вверх
boostcoder
Дата 23.6.2012, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



в линуксе не воспроизводится: http://liveworkspace.org/code/2e3a715a0526...9b60a992f395082

PM WWW   Вверх
null56
Дата 24.6.2012, 04:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 721
Регистрация: 19.3.2008

Репутация: 2
Всего: 12



1,46 и 1,49 в линуксе не проявляется
PM MAIL   Вверх
Randajad
Дата 24.6.2012, 08:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 295
Регистрация: 15.3.2012

Репутация: 8
Всего: 8



1.50. Вянда. GCC 4.8.

Это сообщение отредактировал(а) Randajad - 24.6.2012, 08:55
PM MAIL   Вверх
Randajad
Дата 24.6.2012, 09:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 295
Регистрация: 15.3.2012

Репутация: 8
Всего: 8



Смена буста на 1.49 и GCC на 4.7.1 изменений не дала.

Добавлено @ 09:15
Смена GCC на проверенный временем TDM GCC 4.6.1 разрешила проблему!
http://tdm-gcc.tdragon.net/

Вывод -> сборки от boostcoder'а имеют проблему.

Это сообщение отредактировал(а) Randajad - 24.6.2012, 09:15
PM MAIL   Вверх
boostcoder
Дата 24.6.2012, 09:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



в венде баг воспроизводится.


Цитата(Randajad @  24.6.2012,  09:07 Найти цитируемый пост)
Смена GCC на проверенный временем TDM GCC 4.6.1 разрешила проблему!

ложь!
проблема осталась.
проверено с 1.49 и 1.50(svn).

Цитата(Randajad @  24.6.2012,  09:07 Найти цитируемый пост)
Вывод -> сборки от boostcoder'а имеют проблему.

возможно проблемы и имеются(с распараллеливанием LTO, к примеру), но только этой проблемы нет.
посему - снова ложь.

PM WWW   Вверх
Randajad
Дата 24.6.2012, 09:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 295
Регистрация: 15.3.2012

Репутация: 8
Всего: 8



Не ложь! У меня проблема пропала.

Поотлаживал код GCC 4.6.1 и 4.7.1.

Начало у всех одинаковое:
Код

DWORD attr(::GetFileAttributesW(p.c_str()));
    if (attr == 0xFFFFFFFF)
    {
      return process_status_failure(p, ec); // вызывается сие
    }


4.6.1:
Код

 fs::file_status process_status_failure(const path& p, error_code* ec)
  {
    int errval(::GetLastError()); // Тут errval как и должно быть имеет значение 2, что равно ERROR_FILE_NOT_FOUND
    if (ec != 0)                             // always report errval, even though some
      ec->assign(errval, system_category());   // errval values are not status_errors

    if (not_found_error(errval))
    {
      return fs::file_status(fs::file_not_found, fs::no_perms); // Отсюда возвращается кошерное значение
    }


4.7.1:

Код

 fs::file_status process_status_failure(const path& p, error_code* ec)
  {
    int errval(::GetLastError()); // Тут errval магическим образом обнуляется. Если же его принтфать прямо на "месте" ошибки, то он имеет кошерное значение. 
    if (ec != 0)                             // always report errval, even though some
      ec->assign(errval, system_category());   // errval values are not status_errors

    if (not_found_error(errval))
    {
      return fs::file_status(fs::file_not_found, fs::no_perms);
    }
...
 BOOST_FILESYSTEM_THROW(filesystem_error("boost::filesystem::status",
        p, error_code(errval, system_category()))); // И кидается исключение...

PM MAIL   Вверх
boostcoder
Дата 24.6.2012, 10:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Цитата(Randajad @  24.6.2012,  09:48 Найти цитируемый пост)
Не ложь! У меня проблема пропала.

у меня не воспроизводится проблема.
win7-64bit.

у тебя какая из вендов? разрядность?

PM WWW   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0875 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.