Что нового

Чтение и применение настроек *ini-файла

A

at

Гость
Версия AutoIt: 3.

Описание: Добрый день, Уважаемое сообщество. Прошу подсказку. Как сделать, чтоб при запуске программы подхватывались настройки из *ini-файла

Код:
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <GuiStatusBar.au3>
#include <TabConstants.au3>
#include <WindowsConstants.au3>
#include <GUIConstants.au3>

$Form2 = GUICreate("Server", 133, 198, 279, 141)
$PageControl1 = GUICtrlCreateTab(0, 8, 132, 168)
$TabSheet_General = GUICtrlCreateTabItem("Поехали")
$Button_Server_1 = GUICtrlCreateButton("1", 24, 40, 75, 25)
GUICtrlSetFont(-1, 8, 400, 0, "Arial")
$Button_Server_2 = GUICtrlCreateButton("2", 24, 72, 75, 25)
GUICtrlSetFont(-1, 8, 400, 0, "Arial")
$Button_Server_3 = GUICtrlCreateButton("3", 24, 104, 75, 25)
GUICtrlSetFont(-1, 8, 400, 0, "Arial")
$Button_Server_4 = GUICtrlCreateButton("4", 24, 136, 75, 25)
GUICtrlSetFont(-1, 8, 400, 0, "Arial")
$TabSheet_Option = GUICtrlCreateTabItem("Настроили")
$Button_Option_1 = GUICtrlCreateButton("Файл настроек", 16, 128, 99, 25)
GUICtrlSetFont(-1, 8, 400, 0, "Arial")
GUICtrlCreateTabItem("")
$StatusBar1 = _GUICtrlStatusBar_Create($Form2)
GUISetState(@SW_SHOW)

$sIniFile = @ScriptDir & '\conf.ini'

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        
        Case $Button_Option_1
            $sFile_1 = FileOpenDialog("Выберите файл", "C:\", "Файл сервера (server*.txt)")
            IniWrite($sIniFile, 'directory', 'path', $sFile_1)
        
	    Case $Button_Server_1
            FileOpen($sFile_1, 2);Открываем файл настроек
            FileWrite($sFile_1,'1') ;Вносим изменения
            FileClose($sFile_1) ;Закрываем файл
      
        Case $Button_Server_2
            FileOpen($sFile_1, 2);Открываем файл настроек
            FileWrite($sFile_1,'2') ;Вносим изменения
            FileClose($sFile_1) ;Закрываем файл

        Case $Button_Server_3
            FileOpen($sFile_1, 2);Открываем файл настроек
            FileWrite($sFile_1,'3') ;Вносим изменения
            FileClose($sFile_1) ;Закрываем файл
      
        Case $Button_Server_4
            FileOpen($sFile_1, 2);Открываем файл настроек
            FileWrite($sFile_1,'4') ;Вносим изменения
            FileClose($sFile_1) ;Закрываем файл

    EndSwitch
WEnd
 

SET777

Новичок
Сообщения
51
Репутация
3
Код:
#include<Array.au3>
$sPathToIni = @ScriptDir & '\conf.ini'
$var =  IniRead ( $sPathToIni, "directory", "path",0) ; возвратит отдельно считанный параметр
$var2 = IniReadSection($sPathToIni, "directory") ;возвратит массив пар параметр=значение 

; эти значения нужно подставлять под те настройки которые должны подхватываться с INI файла

MsgBox(0,"",$var)

_ArrayDisplay($var2)
 
Автор
A

at

Гость
SET777, Спасибо, за ответ.
Дико извиняюсь, но я скорее всего не правильно объяснил ситуацию или здорово застрял в танке. Ни примеры ни справка не помогают.

Задача программы заключается в том, что при необходимости мы изменяем информацию в файле server.txt. Происходит это за счет нажатия кнопок: $Button_Server_1 ... $Button_Server_4. Местоположение server.txt определяется пользователем, поэтому при первом запуске программы мы выбираем его через FileOpenDialog и привязываем к переменной $sFile_1.
...До этого места я добрался без проблем.
Собственно теперь о проблеме: При перезапуске программы, нам нужно чтобы наши настройки сохранялись.
 

sngr

AutoIT Гуру
Сообщения
1,010
Репутация
408
Наверно вам нужно что-то вроде этого:
Код:
OnAutoItExitRegister("fu")
Func fu ()
	IniWrite(@ScriptDir & '\1.ini','sec','k','1')
EndFunc
 
Автор
A

at

Гость
sngr, Спасибо. К сожалению, не помогло.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
at [?]
К сожалению, не помогло.
Вы напишите, какие настройки должны сохраняться и подхватываться в(из) ини-файла, желательно с примером самого ини-файла.
 

_Lexa98_

Осваивающий
Сообщения
551
Репутация
25
at
Вам нужно, чтобы скрипт проверял ini файл? Например: если в ini написано: "fun1" , то выполняется одна функция, а если "fun2" , то другая. Так?
 
Автор
A

at

Гость
Нужно, чтобы в ini-файле сохранялось местоположение файла server.txt, которое мы указали при первом запуске программы. В дальнейшем программа при перезапуске должна сама обращаться к файлу server.txt, благодаря настройкам в ini-файле. В моем примере, запись в ini-файл происходит правильно, но при перезапуске не происходит чтения этой записи.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
at,
Попробуйте так.
Код:
#include <GUIConstantsEx.au3>

$sIniFile = @ScriptDir & '\conf.ini'
$sButton_Option_1_Text = 'Файл настроек'
$sFile_1 = IniRead($sIniFile, 'directory', 'path', '')

$hGui2 = GUICreate('Server', 300, 200)
$nButton_Server_1 = GUICtrlCreateButton('1', 100, 40, 100, 25)
$nLabel_File_1 = GUICtrlCreateLabel($sFile_1, 5, 75, 290, 20)
$nButton_Option_1 = GUICtrlCreateButton('', 50, 150, 200, 25)
If $sFile_1 Then
	$sButton_Option_1_Text = 'Изменить файл настроек'
Else
	GUICtrlSetState($nButton_Server_1, $GUI_DISABLE)
EndIf
GUICtrlSetData($nButton_Option_1, $sButton_Option_1_Text)
GUISetState()

While 1
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			Exit
		Case $nButton_Option_1
			$sFile_1 = FileOpenDialog('Выберите файл', 'C:\', 'Файл сервера (server*.txt)')
			If @error Then ContinueLoop
			IniWrite($sIniFile, 'directory', 'path', $sFile_1)
			$sButton_Option_1_Text = 'Изменить файл настроек'
			GUICtrlSetState($nButton_Server_1, $GUI_ENABLE)
			GUICtrlSetData($nLabel_File_1, $sFile_1)
			GUICtrlSetData($nButton_Option_1, $sButton_Option_1_Text)
		Case $nButton_Server_1
			FileOpen($sFile_1, 2)
			FileWrite($sFile_1, '1')
			FileClose($sFile_1)
	EndSwitch
WEnd
 
Автор
A

at

Гость
Всем Спасибо.

Вот рабочий код:
Код:
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <GuiStatusBar.au3>
#include <TabConstants.au3>
#include <WindowsConstants.au3>
#include <GUIConstants.au3>

$Form2 = GUICreate('Server', 133, 198, 279, 141)
$PageControl1 = GUICtrlCreateTab(0, 8, 132, 168)
$TabSheet_General = GUICtrlCreateTabItem('Поехали')
$Button_Server_1 = GUICtrlCreateButton('1', 24, 40, 75, 25)
GUICtrlSetFont(-1, 8, 400, 0, 'Arial')
$Button_Server_2 = GUICtrlCreateButton('2', 24, 72, 75, 25)
GUICtrlSetFont(-1, 8, 400, 0, 'Arial')
$Button_Server_3 = GUICtrlCreateButton('3', 24, 104, 75, 25)
GUICtrlSetFont(-1, 8, 400, 0, 'Arial')
$Button_Server_4 = GUICtrlCreateButton('4', 24, 136, 75, 25)
GUICtrlSetFont(-1, 8, 400, 0, 'Arial')
$TabSheet_Option = GUICtrlCreateTabItem('Настроили')
$Button_Option_1 = GUICtrlCreateButton('Файл настроек', 16, 128, 99, 25)
GUICtrlSetFont(-1, 8, 400, 0, 'Arial')
GUICtrlCreateTabItem('')
$StatusBar1 = _GUICtrlStatusBar_Create($Form2)
GUISetState(@SW_SHOW)

$sIniFile = @ScriptDir & '\conf.ini'
$sFile_1 = IniRead($sIniFile, 'directory', 'path', '')

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
			
		Case $Button_Option_1
            $sFile_1 = FileOpenDialog('Выберите файл', 'C:\', 'Файл сервера (server*.txt)')
            IniWrite($sIniFile, 'directory', 'path', $sFile_1)
		
	    Case $Button_Server_1
            FileOpen($sFile_1, 2);Открываем файл настроек
            FileWrite($sFile_1,'1') ;Вносим изменения
            FileClose($sFile_1) ;Закрываем файл
      
        Case $Button_Server_2
            FileOpen($sFile_1, 2);Открываем файл настроек
            FileWrite($sFile_1,'2') ;Вносим изменения
            FileClose($sFile_1) ;Закрываем файл

        Case $Button_Server_3
            FileOpen($sFile_1, 2);Открываем файл настроек
            FileWrite($sFile_1,'3') ;Вносим изменения
            FileClose($sFile_1) ;Закрываем файл
      
        Case $Button_Server_4
            FileOpen($sFile_1, 2);Открываем файл настроек
            FileWrite($sFile_1,'4') ;Вносим изменения
            FileClose($sFile_1) ;Закрываем файл

    EndSwitch
WEnd


Я не правильно указывал последний параметр IniRead , пытаясь в нем ссылаться на переменную $sFile_1.

Проблема пряталась в этой строке:
Код:
$sFile_1 = IniRead($sIniFile, 'directory', 'path', '')
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
at [?]
Вот рабочий код
Я бы оставил эти строки:
Код:
;...
$sIniFile = @ScriptDir & '\conf.ini'
$sFile_1 = IniRead($sIniFile, 'directory', 'path', '')
If Not $sFile_1 Then $sFile_1 = 'Какой-то путь по умолчанию'
;...
;--------
;...
$sFile_1 = FileOpenDialog('Выберите файл', 'C:\', 'Файл сервера (server*.txt)')
If @error Then ContinueLoop
;...
 
Верх