Pastebin
Paste #2470: pascal write
< previous paste - next paste>
Pasted by Anonymous Coward
procedure WriteFile(Filename: String; BufferSize: Integer);
var
// Buffer: array[0..1024*1024 ] of Byte;
Buffer: Array of Byte;
BytesWritten, i, j: Int64;
StartTime, EndTime, TmpTime, TmpTime2, Elapsed: integer;
WriteTime, WriteSpeed: Double;
StatusLine : String;
OutFile: File;
tmp: word;
begin
StartTime := GetTickCount();
BytesWritten:=0;
SetLength(Buffer, 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, 1);
Log('File opened...');
//with TFileStream.Create(Filename, fmCreate) do
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();
//Write(Buffer, BufferSize);
//WriteBuffer(Buffer, BufferSize);
BlockWrite(OutFile, Buffer, BufferSize, tmp);
// FlushFileBuffers(OutFile);
BytesWritten:= BytesWritten + BufferSize;
Elapsed := GetTickCount() - StartTime;
Form1.StatusBar1.Panels[0].Text := 'Time elapsed: ' + IntToStr(Round(Elapsed/1024)) + ' s';
Form1.StatusBar1.Panels[1].Text := 'MB written: ' + IntToStr(Round(BytesWritten/1024/1024));
try
Form1.StatusBar1.Panels[2].Text := 'Speed: ' + FormatFloat('0.00', (byteswritten / 1024/1024) / (elapsed / 1000)) + ' mb/s';
Except
on e: EZeroDivide do
Form1.StatusBar1.Panels[2].Text := 'Speed: ' + 'NaN' + ' mb/s';
end;
Form1.StatusBar1.Panels[3].Text := 'Free space: ' + FormatFloat('0.00', (DiskFree(0) / 1024/1024)) + ' mb';
form1.ProgressBar1.Position:=Round(BytesWritten / 1024 / 1024);
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 Form1.Memo1.Lines.Add(IntToStr(Round(BytesWritten/1024/1024)) + ' MB written in ' + FloatToStr(WriteTime) + ' seconds ('+ FloatToStr(WriteSpeed) +' MB/s) to ' + filename)
else Log('Write aborted');
end;
New Paste
Go to most recent paste.