В обеих случаях надо создавать временный файл или массив, а потом переписывать исходный файл.
Цитата
запись не в конец файла через простой append, а в i-тую строчку
Читаешь файл построчно и пишешь каждую строку в новый (временный) файл, при этом надо завести переменную-счетчик прочитанных строк, когда она будит равнеться номеру строчки, какую надо добавить, то просто записываешь ее во временный файл, и потом меняешь исходный файл на временный.
С удалениям тоже самое, только вместо записи, просто пропусаешь.
Код
i:=0;
while not (eof(f)) do
begin
inc(i);
readln(f,s);
if i<>DeleteNumber then
writeln(TempFile,s)
end;
код не проверен, главное - идея.
В FAQ есть пример
Удаление строки из текстового файла