Проблема с find_directory(B_USER_SETTINGS_DIRECTORY)
_hitech_ 22 июля, 2009 - 10:40.Для программы. разрабатываемой в Haiku 31545 gcc2.95, мне нужно получить доступ для чтения к файлу TrackerSettings, находящемуся в /boot/home/config/settings/Tracker/. Я создал для этого вот такую конструкцию:
BPath* pathToSettings = NULL;
FILE* settingsFile;
..
if ( (find_directory (B_USER_SETTINGS_DIRECTORY,
pathToSettings,
false, NULL) != B_OK ) ||
( pathToSettings == NULL ) )
{
ErrorAlert* error = new ErrorAlert («Can't find the user settings directory!», true);
return (NULL);
}
pathToSettings–>Append(«Tracker/TrackerSettings», true);
/* Now the varible pathToSettings is set to Tracker Settings file. */
settingsFile = fopen (pathToSettings–>Path(), r);
Этот код не работает. Я вываливаюсь с ошибкой Can't find the user settings directory. Если убрать проверку на NULL у pathToSettings, я продолжаю вываливаться с этой же ошибкой. (ErrorAlert — это слегка модифицированный Alert, средство дебаггинга).
UPDATE: Оставил запрос в Haiku–development mailing list.
Приходится пользовтаься более архаичной и менее совместимой конструкцией:
settingsFile = fopen («/boot/home/config/settings/Tracker/TrackerSettings», r);
Вопрос: что я делаю не так? Особенно если учесть, что та же самая конструкция работает без сучка, без задоринки с B_COMMON_SETTINGS_DIRECTORY, за одним исключением: интересующего меня TrackerSettings там нет.
Пытался проверить наличие соответствующего бага в Haiku Bug Management System, но там сегодня сервер не работает (500 Internal Server Error).
А какой
А какой код ошибки find_directory возвращает? Я обычно его прямо в сообщение о проблеме strerror–ом раскодирую — чтобы лишний раз отладчика не будить. :–)
Мне
Мне уже ответили в haiku development. Вся проблема в BPath *pathToSettings = NULL. Оказывается, find_directory не создаёт объект, а только инициализирует уже созданный. Поэтому надо было сначала сделать объект с помощью BPath pathToSettings, а затем вызывать find_directory ( , &pathToSettings, );
Но в любом случае это не имеет значения. Меньше чем через месяц код ICU войдёт в Гайку, и всё, что мне нужно из Tracker settings file, можно будет брать напрямую из ICU (а из Tracker settings это, естественно, уберут). Месячишко оно будет работать с прямым fopen, а потом всё равно переделывать придётся.
Отправить комментарий