В 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 |