Pastebin

Paste #2474: pascal write, runerror 1784

< previous paste - next paste>

Pasted by zaher

Download View as text


procedure Log(s:string);
begin
end;

procedure WriteFile(Filename: String; BufferSize: longint);
var
   //Buffer: Array of Byte;
   Buffer: PByte;
   BytesWritten, i, j: longint;
   StartTime, EndTime, TmpTime, TmpTime2, Elapsed: integer;
   WriteTime, WriteSpeed: Double;
   StatusLine : String;
   OutFile: File;
   tmp: Word;
   doWrite: Boolean;
begin
  Log('WriteFile("'+Filename+'", '+IntToStr(BufferSize)+')');
  StartTime := GetTickCount();
  BytesWritten:=0;
  //SetLength(Buffer, BufferSize);

  Buffer := AllocMem(SizeOf(Byte) * BufferSize);
  // Initialize buffer with random bytes
  Randomize;
  Log('Initializing buffer with random bytes...');
  for j:=0 to BufferSize do
  begin
    Buffer[j] := Random(256);
  end;
  Log('Initialized buf[0..' + IntToStr(j) + ']');

  // Write the file
  Log('Opening "' + Filename + '" for writing...');
  Assign(OutFile, Filename);
  Rewrite(OutFile, BufferSize);
  Log('File opened...');
  doWrite := true;
  try
//    Form1.ProgressBar1.Position:=0;
//    Form1.ProgressBar1.Max:=Round((DiskFree(0) - BufferSize * 2 ) / 1024 / 1024);
    i := 0;
    While ( (doWrite = True ) and (DiskFree(0) > BufferSize * 2) ) do
    Begin
      Inc(i);
      If doWrite Then
      Begin
        TmpTime := GetTickCount64();
        BlockWrite(OutFile, Buffer, 1, tmp);
        FlushThread;
        BytesWritten:= BytesWritten + BufferSize;
        Elapsed := GetTickCount() - StartTime;

        try
          //Form1.StatusBar1.Panels[2].Text := 'Speed: ' + FormatFloat('0.00', (byteswritten / 1024/1024) / (elapsed / 1000)) + ' mb/s';
        Except
        end;

        tmptime2 := GetTickCount64();

        StatusLine:='';
        StatusLine:=StatusLine + ' I='           + IntToStr(i);
        StatusLine:=StatusLine + ' BytesWritten='+ IntToStr(BytesWritten);
        StatusLine:=StatusLine + ' CycleTime='   + IntToStr(tmptime2 - tmptime);
        Log(StatusLine);

        Application.ProcessMessages;
      end
      else
      begin
        Log('Aborting!');
      end;
      Application.ProcessMessages;
    end;
    Log('Done!');
  finally
    // Close the file handle
    Log('Closing file handle.');
    Close(OutFile);
    //Free;
  end;
  EndTime:=GetTickCount();
  WriteTime:=(endtime-starttime)/1000;
  WriteSpeed:=BytesWritten/1024/1024/writetime;
  if doWrite then
  else
      Log('Write aborted');
  Freemem(Buffer);
end;

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
begin
  WriteFile('c:\1.txt', 1024*1024);
end;

New Paste


Do not write anything in this field if you're a human.

Go to most recent paste.