procedure GenerateRandomFile(FileName : String; FileSize : Int64; CompressibilityPercentage : Integer); const BUFFER_LENGTH = 4; ARRAY_LENGTH = 1 * 1024; var TheTime : Integer; i, k : Integer; BufArr : Array [0..ARRAY_LENGTH - 1] of Integer; TheFile : TFileStream; begin TheTime := GetTickCount(); Randomize; FileSize := Trunc(FileSize / BUFFER_LENGTH); // Buf (Integer) uses 4 bytes, thus we divide by 4 if (CompressibilityPercentage > 0) then begin CompressibilityPercentage := Trunc(100 / CompressibilityPercentage); FileSize := Trunc(FileSize / CompressibilityPercentage); if (CompressibilityPercentage > 1) then Dec(CompressibilityPercentage); end; // ============================================ // // Generate truly non-compressible, random file // // ============================================ // TheFile := TFileStream.Create(FileName, fmCreate OR fmOpenReadWrite); with TheFile do begin for i := 0 to Trunc(FileSize / ARRAY_LENGTH) - 1 do // Iterate begin for k := 0 to (ARRAY_LENGTH - 1) do BufArr[k] := Random(9999999) * i; WriteBuffer(BufArr, BUFFER_LENGTH * ARRAY_LENGTH); end; // for // ============================ // // Adjust compressibility level // // ============================ // for k := 1 to CompressibilityPercentage do begin for i := 0 to Trunc(FileSize / ARRAY_LENGTH) - 1 do // Iterate begin Position := (i * BUFFER_LENGTH * ARRAY_LENGTH); Read(BufArr, BUFFER_LENGTH * ARRAY_LENGTH); Position := Size; WriteBuffer(BufArr, BUFFER_LENGTH * ARRAY_LENGTH); end; // for end; // for Free; end; // with ShowMessage('Generated [' + FileName + '] in ' + IntToStr(GetTickCount() - TheTime) + ' milli-seconds'); end;