Главная

Проблема с find_directory(B_USER_SETTINGS_DIRECTORY)

Для программы. разрабатываемой в 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, а потом всё равно переделывать придётся.

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Allowed HTML tags: <a> <em> <i> <img> <strong> <b> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Строки и параграфы переносятся автоматически.

Подробнее о форматировании

CAPTCHA
Введите перечисленные символы, чтобы мы убедились, что вы не робот. Не требуется для зарегистрированных пользователей.
m
N
u
z
z
M
Enter the code without spaces and pay attention to upper/lower case.