Hi Alex,
Zitat von
Schwedenbitter:
... Ich habe die Änderungen in meinen Quellcode übernommen. ...
nicht wirklich.
Ich habe das dann mal für dich gemacht und dann sieht das so aus:
Delphi-Quellcode:
Const
BuffSize = 1
shl 20;
// genau 1,0 MB
var
Buffer:
Array [1..BuffSize]
Of Byte;
Procedure TForm1.Start1Click(Sender: TObject);
Var
I: Cardinal;
FHandle: Cardinal;
WriteFailed, WriteCanceled: Boolean;
BytesWritten: Cardinal;
E1,E2,CB: Boolean;
begin
// ...
{ Jetzt schreiben}
If FHandle<>INVALID_HANDLE_VALUE
Then
Begin
if CB1.Checked
then I := MaxInt
else I := StrToInt(Edit2.Text);
Repeat
WriteFailed:=not WriteFile(FHandle,Buffer,BuffSize,BytesWritten,
nil);
Dec(I);
Application.ProcessMessages;
Until WriteCanceled
Or WriteFailed
Or (I=0)
or (BytesWritten<BuffSize);
If WriteFailed
Then
ShowMessage('
Mist: ' + SysErrorMessage(GetLastError));
{Datei schließen}
CloseHandle(FHandle);
End;
// ...
end;
Ein MegaByte musst du nicht selbst ausrechnen, das macht der Compiler für dich - wenn du willst. Den Buffer solltest du nicht lokal zur Prozedur deklarieren, er könnte den Stack sprengen. Beim Benennen deiner Komponenten und Variablen bist du noch nicht sehr konsistent, lies dazu mal einen
Style-Guide. Beim Auffangen des Rückgabewertes von WriteFile() hast du die Semantik invertiert, so dass Erfolg zu Misserfolg umgemünzt wurde.
Vergleichbare Ergebnisse erhältst du mit deiner Programmidee nie. Du kannst zwar den einen oder anderen Cache eliminieren, aber die aktuelle Verteilung von freiem Speicherplatz dürfte von Festplatte zu Festplatte stark abweichen.
Trotzdem noch viel Spaß mit deinem Projekt.
Freundliche Grüße