Pastebin
Paste #2477: pascal write, TFileStream
< previous paste - next paste>
Pasted by zaher
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; tmp: Word; doWrite: Boolean; fs: TFileStream; begin Log('WriteFile("'+Filename+'", '+IntToStr(BufferSize)+')'); StartTime := GetTickCount(); BytesWritten:=0; //SetLength(Buffer, BufferSize); Buffer := AllocMem(SizeOf(Byte) * BufferSize); try // 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...'); Log('File opened...'); fs:=TFileStream.Create(Filename, fmCreate); 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(); fs.WriteBuffer(Buffer^, BufferSize); FlushFileBuffers(fs.Handle); 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 fs.Free; Log('Closing file handle.'); //Free; end; EndTime:=GetTickCount(); WriteTime:=(endtime-starttime)/1000; WriteSpeed:=BytesWritten/1024/1024/writetime; if doWrite then else Log('Write aborted'); finally Freemem(Buffer); end; end;
New Paste
Go to most recent paste.