Advertisement
gdhami

Generate random files

Apr 19th, 2012
467
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 2.12 KB | None | 0 0
  1. procedure GenerateRandomFile(FileName : String; FileSize : Int64; CompressibilityPercentage : Integer);
  2. const
  3.      BUFFER_LENGTH = 4;
  4.      ARRAY_LENGTH  = 1 * 1024;
  5.  
  6. var
  7.    TheTime : Integer;
  8.    i, k    : Integer;
  9.  
  10.    BufArr  : Array [0..ARRAY_LENGTH - 1] of Integer;
  11.    TheFile : TFileStream;
  12. begin
  13.      TheTime  := GetTickCount();
  14.  
  15.      Randomize;
  16.      FileSize := Trunc(FileSize / BUFFER_LENGTH);    // Buf (Integer) uses 4 bytes, thus we divide by 4
  17.  
  18.      if (CompressibilityPercentage > 0) then
  19.      begin
  20.           CompressibilityPercentage := Trunc(100 / CompressibilityPercentage);
  21.           FileSize                  := Trunc(FileSize / CompressibilityPercentage);
  22.           if (CompressibilityPercentage > 1) then
  23.              Dec(CompressibilityPercentage);
  24.      end;
  25.  
  26.  
  27.      // ============================================ //
  28.      // Generate truly non-compressible, random file //
  29.      // ============================================ //
  30.      TheFile       := TFileStream.Create(FileName, fmCreate OR fmOpenReadWrite);
  31.      with TheFile do
  32.      begin
  33.           for i := 0 to Trunc(FileSize / ARRAY_LENGTH) - 1 do    // Iterate
  34.           begin
  35.                for k := 0 to (ARRAY_LENGTH - 1) do
  36.                    BufArr[k] := Random(9999999) * i;
  37.  
  38.                WriteBuffer(BufArr, BUFFER_LENGTH * ARRAY_LENGTH);
  39.           end;    // for
  40.  
  41.           // ============================ //
  42.           // Adjust compressibility level //
  43.           // ============================ //
  44.           for k := 1 to CompressibilityPercentage do
  45.           begin
  46.                for i := 0 to Trunc(FileSize / ARRAY_LENGTH) - 1 do    // Iterate
  47.                begin
  48.                     Position := (i * BUFFER_LENGTH * ARRAY_LENGTH);
  49.                     Read(BufArr, BUFFER_LENGTH * ARRAY_LENGTH);
  50.  
  51.                     Position := Size;
  52.                     WriteBuffer(BufArr, BUFFER_LENGTH * ARRAY_LENGTH);
  53.                end;    // for
  54.           end;    // for
  55.  
  56.           Free;
  57.      end;    // with
  58.  
  59.      ShowMessage('Generated [' + FileName + '] in ' + IntToStr(GetTickCount() - TheTime) + ' milli-seconds');
  60. end;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement