_FileWriteToLine(@ScriptDir & '\1.txt', 5, 'Привет', 1)
Func _FileWriteToLine($sFile, $iLine, $sText, $fOverWrite = 0)
If $iLine <= 0 Then Return SetError(4, 0, 0) ; Проверка чтобы строка была 0 и больше
If Not IsString($sText) Then ; Проверка чтобы переменная $sText была строкой и не пустой
$sText = String($sText)
If $sText = "" Then Return SetError(6, 0, 0)
EndIf
If $fOverWrite <> 0 And $fOverWrite <> 1 Then Return SetError(5, 0, 0) ; Проверка валидности флага $fOverWrite
If Not FileExists($sFile) Then Return SetError(2, 0, 0) ; Проверка существования файла (странно что последний)
Local $sRead_File = FileRead($sFile) ; Читаем файл
Local $iEncoding = FileGetEncoding($sFile)
Local $hFile = FileOpen($sFile, $iEncoding + $FO_APPEND) ; Открываем файл, чтобы вставить строку
If $hFile = -1 Then Return SetError(3, 0, 0) ; Вылет если не открылся
If $iLine = 1 Then
Local $iPos = 0
Else
Local $iPos = StringInStr($sRead_File, @LF, 1, $iLine - 1)
If Not $iPos Then Return SetError(1, 0, 0) ; Если номер строки больше чем число строк
EndIf
FileSetPos($hFile, $iPos, $FILE_BEGIN) ; Установка позиции в позицию вставки
Local $CRLF = @CRLF
If $fOverWrite Then
$iPos = StringInStr($sRead_File, @LF, 1, 1, $iPos + 1)
If Not $iPos Then
$sRead_File = ''
$CRLF = ''
EndIf
EndIf
$sRead_File = StringTrimLeft($sRead_File, $iPos) ; Обрезка левой части данных
FileWrite($hFile, $sText & $CRLF & $sRead_File)
$iPos = FileGetPos($hFile)
FileClose($hFile)
If $fOverWrite Then
$iSize = FileGetSize($sFile)
If $iPos < $iSize Then
$hFile = _WinAPI_CreateFile($sFile, 2, 4)
_WinAPI_SetFilePointer($hFile, $iPos)
_WinAPI_SetEndOfFile($hFile)
_WinAPI_CloseHandle($hFile)
EndIf
EndIf
Return 1
EndFunc ;==>_FileWriteToLine