folgende Procedure beschreibt einen Stream mit einen vorgegebenen String.
Dieser String (pattern) wird solange wiederholt, bis die vorgegebene Grösse (size) erreicht ist:
Delphi-Quellcode:
procedure WritePatternString(stream:TStream; pattern:string; size:integer);
var
i : Integer;
rest : Integer;
begin
Assert(Assigned(stream));
// wenn kein pattern vorgegeben, dann wird mit #0 gefüllt
if pattern='' then
pattern := #0;
// wenn das pattern sehr kurz ist, wird es solange
// aneinander gehängt, bis mindestens 1KB zusammenkommt
// nur so ist die Performance zufriedenstellend
while Length(pattern) < 1024 do
pattern := pattern + pattern;
// zurück auf Anfang
stream.Position := 0;
for i := 1 to Size div Length(pattern) do
begin
stream.WriteBuffer(pattern[1], Length(pattern));
end;
// restliche Byte ausrechnen
rest := size mod Length(pattern);
// und ggf. schreiben
if rest > 0 then
stream.WriteBuffer(pattern[1], rest);
end;
procedure WritePatternToFile(const filename:string; pattern:string; size:integer);
var
fs : TFileStream;
begin
// filestream erzeugen
fs := TFileStream.Create(filename, fmCreate);
try
// Daten schreiben
WritePatternString(fs, pattern, size);
finally
fs.Free;
end;
end;