Опять ini-файлы
От: Budenstain  
Дата: 15.11.02 15:14
Оценка:
Здравствуйте !
У меня следующая проблема. Решил все-таки использовать ini-файл для хранения небольшого количества настроек приложения (без использования реестра). Настройки представляют собой некоторый буфер определенной структуры, поэтому использую функцию WritePrivateProfileStruct, которая сохраняет буфер в двоичном виде. Записывается все хорошо, а вот прочитать не удается, т.к. функция возвращает 0, т.е. ошибку. Пробовал указываеть размер буфера для чтения в несколько раз больший чем нужно, но никакого эффекта. Хотел было разобраться с внутренностями WritePrivateProfileStruct, но не нашел исходников.

Поделитесь, пожалуйста, информацией!

Спасибо.
Re: Опять ini-файлы
От: Denwer Россия  
Дата: 18.11.02 07:51
Оценка:
Здравствуйте, 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.
Re: Опять ini-файлы
От: OLEGus1 Россия  
Дата: 18.11.02 10:34
Оценка:
Здравствуйте, Budenstain, Вы писали:

B>использую функцию WritePrivateProfileStruct, которая сохраняет буфер в двоичном виде. Записывается все хорошо, а вот прочитать не удается, т.к. функция возвращает 0, т.е. ошибку.


RECT rect={0};
UINT s=sizeof(RECT);
GetPrivateProfileStruct("mstrim","rect",&rect,s,"mstrim");

У меня работает вот так
Crescite, nos qui vivimus, multiplicamini
Re[2]: Опять ini-файлы
От: Budenstain  
Дата: 20.11.02 13:41
Оценка:
Здравствуйте, 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). Работает намного быстрее, чем с реестром, причем последний не нужно засирать данными.

Но все равно спасибо за проявленный интерес.
Re[2]: Опять ini-файлы
От: Budenstain  
Дата: 20.11.02 13:45
Оценка:
Здравствуйте, 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). Работает намного быстрее, чем с реестром, причем последний не нужно засирать данными.

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