Artem_Butenko
![](http://forum.ru-board.com/board/avatars/private/Artem_Butenko.gif)
Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Ребята, прошу помощи. До "реформации" топика madmasles предлагал следующий скрипт: Код: Opt('MustDeclareVars', 1) Global $sFile = @SystemDir & '\drivers\etc\hosts', $sString = '127.0.0.1 google.com', $fRes $fRes = _CheckString($sFile, $sString) If @error Then Exit @error If $fRes Then MsgBox(64, 'Info', 'Yes: ' & $sString) Else $fRes = _AddString($sFile, $sString) If @error Then Exit @error MsgBox(64, 'Info', 'New string add: ' & $fRes) EndIf #cs $f_CRLF = True - добавит в конце строки перевод строки (@CRLF) $f_DelEndEmpty = True - удалит все символы перевода строки в конце текста перед добавлением строки #ce Func _AddString($s_File, $s_String, $f_CRLF = True, $f_DelEndEmpty = True) Local $h_File, $s_Text, $i_Enc, $s_BackUp If Not FileExists($s_File) Then Return SetError(-1) If Not $s_String Or StringIsSpace($s_String) Then Return SetError(1) $s_Text = FileRead($s_File) If Not $s_Text Then Return SetError(2) $i_Enc = FileGetEncoding($s_File) If $i_Enc = -1 Then Return SetError(3) $s_BackUp = @ScriptDir & '\' & StringRegExpReplace($s_File, '^.*\\', '') & '.bak' If Not FileCopy($s_File, $s_BackUp, 1) Then Return SetError(3) $h_File = FileOpen($s_File, $i_Enc + 2) If $h_File = -1 Then Return SetError(4) If $f_DelEndEmpty Then $s_Text = StringRegExpReplace($s_Text, '([\r\n]*$)', '') $s_Text &= @CRLF & $s_String If $f_CRLF Then $s_Text &= @CRLF $i_Enc = FileWrite($h_File, $s_Text) FileClose($h_File) If $i_Enc Then FileDelete($s_BackUp) Else If Not FileCopy($s_BackUp, $s_File, 1) Then Return SetError(5) ;If Not FileMove($s_BackUp, $s_File, 1) Then Return SetError(5) EndIf Return ($i_Enc = 1) EndFunc ;==>_AddString Func _CheckString($s_File, $s_String) If Not FileExists($s_File) Then Return SetError(-1) If Not $s_String Or StringIsSpace($s_String) Then Return SetError(1) Local $s_Text = FileRead($s_File) If Not $s_Text Then Return SetError(2) Return (StringRegExp(@CRLF & $s_Text & @CRLF, '\r\n?(\Q' & $s_String & '\E)\r\n?') <> 0) EndFunc ;==>_CheckString | Однако код немножко неисправен. Например, не создается бэкап файла. Пожалуйста, помогите разобраться, что здесь не так. Добавлено: Может у кого-нибудь сохранилась оффлайн версия топика, до удаления сообщений за год? |