Could you guys test this to see if I haven't messed anything up. It now uses the native FileReadToArray() instead of FileRead() and a regular expression.
AutoIt
#include <FileConstants.au3> Local $hFileOpen = FileOpen('Test.txt', $FO_OVERWRITE) For $i = 1 To 100 FileWriteLine($hFileOpen, $i) Next FileClose($hFileOpen) _FileWriteToLine('Test.txt', 10, 'Line_10', 1) ConsoleWrite(@error & @CRLF) ; #FUNCTION# ==================================================================================================================== ; Author ........: cdkid ; Modified.......: partypooper, MrCreatoR, guinness ; =============================================================================================================================== Func _FileWriteToLine($sFilePath, $iLine, $sText, $iOverWrite = 0) If $iLine <= 0 Then Return SetError(4, 0, 0) If Not IsString($sText) Then $sText = String($sText) If $sText = "" Then Return SetError(6, 0, 0) EndIf If $iOverWrite <> 0 And $iOverWrite <> 1 Then Return SetError(5, 0, 0) If FileExists($sFilePath) = 0 Then Return SetError(2, 0, 0) Local $aArray = FileReadToArray($sFilePath) Local $iUBound = UBound($aArray) - 1 If ($iUBound + 1) < $iLine Then Return SetError(1, 0, 0) Local $hFileOpen = FileOpen($sFilePath, FileGetEncoding($sFilePath) + $FO_OVERWRITE) If $hFileOpen = -1 Then Return SetError(3, 0, 0) Local $sData = "" $iLine -= 1 ; Now the array is 0-based, so reduce the line number by 1. For $i = 0 To $iUBound If $i = $iLine Then If $iOverWrite Then If $sText Then $sData &= $sText & @CRLF Else $sData &= $sText & @CRLF & $aArray[$i] & @CRLF EndIf ElseIf $i < $iUBound Then $sData &= $aArray[$i] & @CRLF ElseIf $i = $iUBound Then $sData &= $aArray[$i] EndIf Next FileWrite($hFileOpen, $sData) FileClose($hFileOpen) Return 1 EndFunc ;==>_FileWriteToLine