Здравствуйте !
У меня следующая проблема. Решил все-таки использовать ini-файл для хранения небольшого количества настроек приложения (без использования реестра). Настройки представляют собой некоторый буфер определенной структуры, поэтому использую функцию WritePrivateProfileStruct, которая сохраняет буфер в двоичном виде. Записывается все хорошо, а вот прочитать не удается, т.к. функция возвращает 0, т.е. ошибку. Пробовал указываеть размер буфера для чтения в несколько раз больший чем нужно, но никакого эффекта. Хотел было разобраться с внутренностями WritePrivateProfileStruct, но не нашел исходников.
Здравствуйте, Budenstain, Вы писали:
B>Здравствуйте ! B>У меня следующая проблема. Решил все-таки использовать ini-файл для хранения небольшого количества настроек приложения (без использования реестра). Настройки представляют собой некоторый буфер определенной структуры, поэтому использую функцию WritePrivateProfileStruct, которая сохраняет буфер в двоичном виде. Записывается все хорошо, а вот прочитать не удается, т.к. функция возвращает 0, т.е. ошибку. Пробовал указываеть размер буфера для чтения в несколько раз больший чем нужно, но никакого эффекта. Хотел было разобраться с внутренностями WritePrivateProfileStruct, но не нашел исходников.
B>Поделитесь, пожалуйста, информацией!
B>Спасибо.
А ты сначала найди этот INI файл и посмотри что там у тебя записано в этой секции, может туда и не записалось ничего.
А вообще в МСДНе написано
Note This function is provided only for compatibility with 16-bit versions of Windows. Applications should store initialization information in the registry.
Здравствуйте, Budenstain, Вы писали:
B>использую функцию WritePrivateProfileStruct, которая сохраняет буфер в двоичном виде. Записывается все хорошо, а вот прочитать не удается, т.к. функция возвращает 0, т.е. ошибку.
RECT rect={0};
UINT s=sizeof(RECT);
GetPrivateProfileStruct("mstrim","rect",&rect,s,"mstrim");
Здравствуйте, OLEGus1, Вы писали:
OLE>Здравствуйте, Budenstain, Вы писали:
B>>использую функцию WritePrivateProfileStruct, которая сохраняет буфер в двоичном виде. Записывается все хорошо, а вот прочитать не удается, т.к. функция возвращает 0, т.е. ошибку.
OLE>RECT rect={0}; OLE>UINT s=sizeof(RECT); OLE>GetPrivateProfileStruct("mstrim","rect",&rect,s,"mstrim");
OLE>У меня работает вот так
Спасибо за совет, но так и я могу. Если я знаю размер записанных данных, то нужно делать как у тебя, а если нет ?
Один товарищ писал (какой-то китаец), что эта функция должна возвратить размер хранящихся данных в случае если указанного буфера не хватает. Я проверил, но это не так.
Поэтому пришлось плюнуть на эту лажу, т.к. при размере секции > 35К эти функции не предназначены,
и сделать свои на базе MMF (Memory Mapped File). Работает намного быстрее, чем с реестром, причем последний не нужно засирать данными.
Здравствуйте, Denwer, Вы писали:
D>Здравствуйте, Budenstain, Вы писали:
B>>Здравствуйте ! B>>У меня следующая проблема. Решил все-таки использовать ini-файл для хранения небольшого количества настроек приложения (без использования реестра). Настройки представляют собой некоторый буфер определенной структуры, поэтому использую функцию WritePrivateProfileStruct, которая сохраняет буфер в двоичном виде. Записывается все хорошо, а вот прочитать не удается, т.к. функция возвращает 0, т.е. ошибку. Пробовал указываеть размер буфера для чтения в несколько раз больший чем нужно, но никакого эффекта. Хотел было разобраться с внутренностями WritePrivateProfileStruct, но не нашел исходников.
B>>Поделитесь, пожалуйста, информацией!
B>>Спасибо.
D>А ты сначала найди этот INI файл и посмотри что там у тебя записано в этой секции, может туда и не записалось ничего.
D>А вообще в МСДНе написано D>Note This function is provided only for compatibility with 16-bit versions of Windows. Applications should store initialization information in the registry.
Спасибо за ответ.
НО, во-первых я наверно еще не совсем полный идиот и смотрел содержимое ini-файла.
Во-вторых по поводу MSDN — если следовать совету все скидывать в реестр, то представь ситуацию, когда все программы будут всю свою информацию о параметрах интерфейса хранить в реестре вместо ini-файла ?
Пришлось сделать свои функции по работе Ini-файлами на базе MMF (Memory Mapped File). Работает намного быстрее, чем с реестром, причем последний не нужно засирать данными.