И вот вопрос: Есть один минус и сразу вопрос: Как сделать что бы если количество строк не кратно количеству частей то последний файл меньше ?. То есть пусть все первые файлы равны, последний меньше.
Потому что в данном случае делит не правильно.
Код:
procedure TForm1.Button1Click(Sender: TObject);
const
//Количество частей на которые надо разбить файл.
N = 10;
var
F1, F2 : File;
i, SizePart, SizePartAdd : Cardinal;
Buff : array of Byte;
begin
if OpenDialog1.InitialDir = '' then begin
OpenDialog1.InitialDir := ExtractFilePath(Application.ExeName);
end;
if not OpenDialog1.Execute then Exit;
if not FileExists(OpenDialog1.FileName) then begin
ShowMessage('Указанный файл не найден. Действие отменено.');
Exit;
end;
AssignFile(F1, OpenDialog1.FileName);
Reset(F1, 1);
if FileSize(F1) < N then begin
ShowMessage('Указанный файл слишком мал. Разбиение отменено.');
CloseFile(F1);
Exit;
end;
SizePart := FileSize(F1) div N;
SizePartAdd := FileSize(F1) mod N;
SetLength(Buff, SizePart);
for i := 1 to N do begin
AssignFile(F2, OpenDialog1.FileName + '.part' + IntToStr(i));
Rewrite(F2, 1);
BlockRead(F1, Pointer(Buff)^, SizePart);
BlockWrite(F2, Pointer(Buff)^, SizePart);
if (i = N) and (SizePartAdd > 0) then begin
BlockRead(F1, Pointer(Buff)^, SizePartAdd);
BlockWrite(F2, Pointer(Buff)^, SizePartAdd);
end;
CloseFile(F2);
end;
CloseFile(F1);
end;