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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как пользоваться .ini файлами? 
:(
    Опции темы
cardinal
Дата 29.12.2004, 20:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

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



 В MSDN написано, что функции для работы с ini-файлами оставлены лишь для совместимости с 16-битными версиями Windows, а приложения должны сохранять свои настройки в реестре. smile=29 

ini-файл - текстовый файл с данными в формате:

[секция]
Параметр=значение
...
[секция]
Параметр=значение
...

Для работы с ini-файлами используются API-функции:
WritePrivateProfileSection запись в ini-файл секции с параметрами
WritePrivateProfileString запись в ini-файл строкового параметра
GetPrivateProfileSection получение секции с параметрами
GetPrivateProfileSectionNames получение списка секций
GetPrivateProfileString получение строкового параметра

А вот так выглыдит их описание в VB (можно прямо так вставить в модуль):
Код
Private Declare Function api_GetPrivateProfileSection Lib "kernel32" Alias "GetPrivateProfileSectionA" ( _
ByVal lpSectionName As String, _ 'Имя секции
ByVal lpReturnedString As String, _ 'Возвращаемое значение
ByVal nSize As Long, _ 'Максимальный размер возвращаемого значения
ByVal lpFileName As String _ 'путь к ini-файлу
) As Long

Private Declare Function api_GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" ( _
ByVal lpSectionName As String, _ 'Имя секции
ByVal lpKeyName As String, _ 'Имя параметра
ByVal lpDefault As String, _ 'Значение параметра по умолчанию
ByVal lpReturnedString As String, _ 'Возвращаемое значение
ByVal nSize As Long, _ 'Максимальный размер возвращаемого значения
ByVal lpFileName As String _ 'путь к ini-файлу
) As Long

Private Declare Function api_GetPrivateProfileSectionNames Lib "kernel32" Alias "GetPrivateProfileSectionNamesA" ( _
ByVal lpReturnedString As String, _ 'Возвращаемое значение
ByVal nSize As Long, _ 'Максимальный размер возвращаемого значения
ByVal lpFileName As String _ 'путь к ini-файлу
) As Long

Private Declare Function api_WritePrivateProfileSection Lib "kernel32" Alias "WritePrivateProfileSectionA" ( _
ByVal lpSectionName As String, _ 'Имя секции
ByVal lpString As String, _ 'Значение параметра
ByVal lpFileName As String _ 'путь к ini-файлу
) As Long

Private Declare Function api_WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" ( _
ByVal lpSectionName As String, _ 'Имя секции
ByVal lpKeyName As String, _ 'Имя параметра
ByVal lpString As String, _ 'Значение параметра
ByVal lpFileName As String _ 'путь к ini-файлу
) As Long

Теперь поподробнее о том, что с этим делать.
Попробуем что-нибудь сохранить. Для этого выполним следующее:
nRet = api_WritePrivateProfileString("MySection", "MyKey", "MyValue", App.Path & "\MyINI.ini")
Если nRet<>0, то произошла ошибка, описание которой можно посмотреть вызвав GetLastError(). Если же nRet=0, то смотрим, 
что получилось. В каталоге, где находится программа появился файл MyINI.ini.
Можно записать целую секцию:
Код
nRet = api_WritePrivateProfileSection("MySection2", "Key1=Value1" & vbNullChar & "Key2=Value2", App.Path & 
"\MyINI.ini")

Смотрим, что получилось.
Раз мы сохранили значения, значит надо их восстановить. С восстановлением немного сложнее. Напишем функцию:
Код
Public Function GetPrivateProfileString(SectionName As String, KeyName As String, Default As String, FileName As 
String) As String
Dim sBuf As String 'Здесь будет восстановленное значение
Dim nRet As Long 'Здесь будет значение, которое возвратит функция - длина 
'восстановленного значения
sBuf = String(1024, vbNullChar) 'Нужно занять место в памяти, а то будет ошибка
nRet = api_GetPrivateProfileString(SectionName, KeyName, Default, sBuf, 1024, FileName)
sBuf = Left(sBuf, nRet) 'Обрезаем лишнее
GetPrivateProfileString = sBuf
End Function

Также как и записать целую секцию можно восстановить целую секцию:
Код
Public Function GetPrivateProfileSection(SectionName As String, FileName As String) As String
Dim sBuf As String
Dim nRet As Long
sBuf = String(1024, vbNullChar)
nRet = api_GetPrivateProfileSection(SectionName, sBuf, 1024, FileName)
sBuf = Left(sBuf, nRet)
GetPrivateProfileSection = sBuf
End Function

Действия теже, только будет возвращена строка, содержащая параметры и значения в виде "Key=Value", разеленные пустыми 
символами (vbNullChar).
Можно получить список секций:
Код
Public Function GetPrivateProfileSectionNames(FileName As String) As String
Dim sBuf As String
Dim nRet As Long
sBuf = String(1024, vbNullChar)
nRet = api_GetPrivateProfileSectionNames(sBuf, 1024, FileName)
sBuf = Left(sBuf, nRet)
GetPrivateProfileSectionNames = sBuf
End Function

Этой функцией возвращается строка, содержащая имена секций, разделенные пустыми символами (vbNullChar).
Вот собственно все!:rolleyes 


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "VB6"
Akina

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по VB обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.


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

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


 




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


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

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