Hab' mal ein bisserl rumgespielt, rausgekommen ist dashier:
Delphi-Quellcode:
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils,
Classes;
const
// BUFFER_SIZE = 16384; // 1:19
// BUFFER_SIZE = 65536; // 1:07
// BUFFER_SIZE = 65536 * 2; // 1:03
BUFFER_SIZE = 65536 * 4; // 0:53
// BUFFER_SIZE = 65536 * 8; // 2:07
arLow = 0;
arHigh = 3;
var
i : Integer;
f : array[arLow..arHigh] of TextFile;
ff : TextFile;
inf_buf : array[1..BUFFER_SIZE] of Byte;
utf_buf : array[1..BUFFER_SIZE] of Byte;
sIn : String;
sOut : Array[arLow..arHigh] of String;
sZeile : String;
dtStart : TDateTime;
dtEnde : TDateTime;
begin
dtStart := Now;
WriteLn('Start : ' + DateTimeToStr(dtStart));
sIn := ParamStr(1);
For i := Low(f) to High(f) do begin
sOut[i] := ExtractFilePath(ParamStr(0)) + 'Test_' + IntToStr(i) + '.txt';
AssignFile(F[i],sOut[i]);
SetTextBuf(F[i],utf_buf, BUFFER_SIZE);
ReWrite(F[i]);
end;
i := 0;
AssignFile(ff,sIn);
SetTextBuf(ff,inf_buf,BUFFER_SIZE);
Reset(ff);
while not eof(ff) do begin
ReadLn(ff, sZeile);
WriteLn(F[i],sZeile);
inc(i);
If i > arHigh Then i := arLow;
end;
dtEnde := Now;
WriteLn('Ende : ' + DateTimeToStr(dtEnde));
WriteLn('Zeit : ' + TimeToStr(dtEnde - dtStart));
WriteLn('Buffer: ' + IntToStr(Buffer_Size));
WriteLn('Dateigroessen:');
WriteLn('Eingabe: ',FileSize(ff) * Buffer_Size,' (',sIn,')');
CloseFile(ff);
for i := Low(f) to High(f) do begin
WriteLn('Ausgabe: ',FileSize(f[i]) * Buffer_Size,' (',sOut[i],')');
CloseFile(F[i]);
end;
end.
Hinter der Konstante Buffer_Size steht jeweils, wielange mein Rechner für die Aufteilung einer Datei von 1.250.375.501 Byte benötigt hat.
Eventuell kannst Du damit ja was anfangen.