Что нового

Добавление новой строки в 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
Репутация
623
Zoldan
если ты хочешь именно INI-файл, то никак. его формат подразумевает, что каждый ключ уникален в пределах одной секции. можешь просто писать в INI-подобный файл, вида
key=value
с повторяющимися ключами, но тогда не будет адекватного доступа к значениям посредством INI-функций.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,320
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
Репутация
623
было бы легче, если ТС озвучит более менее конечную цель. просто писать в файл вряд ли является таковой
 
Верх