Здесь "резка" идёт по байтам, а не по строкам, тогда нужно реагировать на перевод каретки, но это слегка затратно, проще использовать возможности класса TStrings, примерно так
Код:
procedure CutFile(FileName: string; PartStrCnt: integer);
var
sl1, sl2: TStrings;
i, j: integer;
begin
sl1:= TStringList.Create;
sl2:= TStringList.Create;
sl1.LoadFromFile(FileName);
i:= 1;
for j := 0 to sl1.Count-1 do
begin
sl2.Add(sl1[j]);
if sl2.Count = PartStrCnt then
begin
sl2.SaveToFile(FileName + '.part' + IntToStr(i));
sl2.Clear;
inc(i);
end;
end;
sl2.SaveToFile(FileName + '.part' + IntToStr(i));
sl1.Free;
sl2.Free;
end;