Что нового

[Файловая система] IniWrite(): Запрос и обсуждение функциональности

snoitaleR

AutoIT Гуру
Сообщения
855
Репутация
223
Не стал эту тему помещать в раздел "Баг-репорты и запросы на новые функции"...
Уже был инцидент... :smile:
В справке написано, что данная функция не создает папок на пути к файлу с настройками (например, altdesk.ini)...
Я бы хотел, чтобы функция автоматически создавала папки и файл настроек, если они отсутствуют...
Или я чего-то недопонимаю?
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
Можно использовать такую конструкцию перед записью в ini*
Код:
$hINI = FileOpen($somepath, 8+1)
FileClose($hINI)

Это создаст структуру папок и файл при отсутствии, либо ничего не сделает если такой файл уже есть
 
Автор
snoitaleR

snoitaleR

AutoIT Гуру
Сообщения
855
Репутация
223
Kaster
Вот я и хочу, чтобы сама функция выполняла эту рутину...
Некоторые функции AUTOIT создают ведь недостающие папки и файлы...
Почему бы IniWrite() не делать то же самое?


Добавлено:
Сообщение автоматически объединено:

Я делаю так:
Код:
$DIR=@AppDataDir&"\ALTDESK"
$INI=$DIR&"\altdesk.ini"
if not FileExists($DIR) then DirCreate($DIR)

То есть, пользователи выдумывают "обходные маневры", когда можно предельно оптимизированный код встроить в саму функцию...
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
В большинстве случаев в этом нет необходимости, а тратить ресурсы на молополезные действия не есть хорошо. Пользователь всегда сам может написать что-то вроде _IniWriteEx().
 
Автор
snoitaleR

snoitaleR

AutoIT Гуру
Сообщения
855
Репутация
223
Yashied
Я подумал, что создание недостающих папок оформлено как функция...
Осталось бы только ее вызвать из IniWrite()...


Добавлено:
Сообщение автоматически объединено:

Возникла интересная мысль...
Для экономии ресурсов AUTOIT можно вообще отказаться от встроенных функций, кроме DllCall()... :smile:
А остальное - UDF...
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Да, тема интересная. Почему то FileWrite() позволяет создавать каталоги при записи (через FileOpen), а IniWrite() нет.
IniWrite мог бы также принимать указатель от FileOpen.

А по теме, я бы использовал такую UDF:

Код:
_IniWriteEx(@ScriptDir & "\MyIni\Test.ini", "Section", "Key_1", "Value 1")

Func _IniWriteEx($sIniFile, $sSection, $sKey, $sValue)
	Local $sDir = StringRegExpReplace($sIniFile, "\\[^\\]*$", "")
	If Not FileExists($sDir) Then DirCreate($sDir)
	Return IniWrite($sIniFile, $sSection, $sKey, $sValue)
EndFunc
 
Автор
snoitaleR

snoitaleR

AutoIT Гуру
Сообщения
855
Репутация
223
CreatoR
Спасибо за пример...
Он, вероятно, оптимальный для "обходных маневров"... :smile:

Но остается вопрос:
Нужно ли запрашивать дополнительную функциональность для функции IniWrite() или нет?

P.S. Если не говорить об оптимальности, то для "обходных маневров" подойдет и мой код, и код, который предложил Kaster...
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
snoitaleR [?]
Нужно ли запрашивать дополнительную функциональность для функции IniWrite() или нет?
Можно попробовать, но наврядли что-то сделают, это слишком тривиальная задача.
 
Верх