Что нового

Добавление новой строки в ini файл

Zoldan

Новичок
Сообщения
8
Репутация
0
Привет всем, пытаюсь сделать выбор файла и сохранения его в ini файл, как сделать чтобы при выборе нового файла ini файл дописывался новой строкой а не перезаписывался?
Пример ini
Код:
[Section]
Patch=C:\TEST\TEST1.txt
Patch=C:\TEST\TEST2.exe
Patch=C:\TEST\TEST1.bat
Patch=C:\TEST\TEST1.dll
Код:
#Include <String.au3>
;------------------------------------------------------------
$sSettings_ini = @ScriptDir & "\Setting.ini"
$sFile = FileOpenDialog("Выберите файл", "", "Все файлы (*.*)")
;------------------------------------------------------------
If FileExists ($sSettings_ini) = 0 Then 
    $hSettings_ini = FileOpen ($sSettings_ini, 2)
    FileClose ($hSettings_ini)
EndIf
;------------------------------------------------------------
IniWrite ($sSettings_ini, "Section", "Patch", $sFile)
MsgBox(4096, "", $sFile)
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
Zoldan
если ты хочешь именно INI-файл, то никак. его формат подразумевает, что каждый ключ уникален в пределах одной секции. можешь просто писать в INI-подобный файл, вида
key=value
с повторяющимися ключами, но тогда не будет адекватного доступа к значениям посредством INI-функций.
 

madmasles

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

$sFileIni = @ScriptDir & '\test.ini'
$sSection = 'Section'
$sNewPath = 'C:\TEST\test500.exe'

If Not FileExists($sFileIni) Then
	IniWrite($sFileIni, $sSection, 'Patch_1', $sNewPath)
	MsgBox(64, 'Info', 'OK - файл ' & $sFileIni & ' создан')
	Exit
EndIf
$aSection = IniReadSection($sFileIni, $sSection)
If @error Then
	MsgBox(16, 'Error', @error)
	Exit
EndIf
$iSearch = _ArraySearch($aSection, $sNewPath, 1, 0, 0, 0, 1, 1)
If $iSearch = -1 Then
	$aSection[0][0] += 1
	ReDim $aSection[$aSection[0][0] + 1][2]
	$aSection[$aSection[0][0]][0] = 'Patch_' & $aSection[0][0]
	$aSection[$aSection[0][0]][1] = $sNewPath
	IniWriteSection($sFileIni, $sSection, $aSection)
	MsgBox(64, 'Info', 'OK')
Else
	MsgBox(16, 'Error', 'Такая запись уже есть')
	Exit
EndIf


test.ini:
Код:
[Section]
Patch_1=C:\TEST\TEST1.txt
Patch_2=C:\TEST\TEST2.exe
Patch_3=C:\TEST\TEST1.bat
Patch_4=C:\TEST\TEST1.dll
Номера, в принципе, можно убрать (поменять 'Patch_' & $aSection[0][0] на 'Patch'), но потом обращаться к секции можно будет только через IniReadSection().
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
было бы легче, если ТС озвучит более менее конечную цель. просто писать в файл вряд ли является таковой
 
Автор
Z

Zoldan

Новичок
Сообщения
8
Репутация
0
madmasles
То что нужно, спасибо.
 
Верх