Thema: Delphi ReadFile und WriteFile

Einzelnen Beitrag anzeigen

marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#10

Re: ReadFile und WriteFile

  Alt 30. Jun 2008, 21:13
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
  Mit Zitat antworten Zitat