色々テストをしていると、ユニークなランダムの中身で、任意サイズの、ダミーファイルが欲しくなることがままある。
デバイスを全てファイルとして扱う Unix や Linux なら、 /dev/urandom
擬似デバイスを使って dd if=/dev/urandom of=out.bin bs=1M count=64
みたいに任意サイズでファイルをコピーして作れば良い。
しかし API ベースの Windows だとそういうわけにいかないので、何らかのスクリプトから API を呼んでやる必要がある。
呼ばせるスクリプトは、 Windows に標準で搭載されていて追加でインストール不要な、毎度おなじみ PowerShell が良いだろう。
作りたいランダムなファイルのサイズが小さければ、 PowerShell 上で以下のような雑なコードを実行すればよい。
$Size = 16KB;
[byte[]]$bin = &{foreach($i in 1..$Size) { Get-Random -Maximum 255 }};
[System.IO.File]::WriteAllBytes((Join-Path (Get-Location) .\out.bin), $bin);
しかし、 MiB オーダーを越えてくると、上記のコードでは速度が実用的ではなくなる。
と言うことで、出力速度も気にしながら、大きめなランダムなファイルを作成するコードを考えてみる。