创建大文件的最快方法?

Ole*_*eev 2 ruby file

我需要创建一个充满任何东西的巨大文件.我这样做,但需要很长时间:

exit 1 unless ARGV.length > 0
File.open("file-#{ARGV[0]}M.txt", 'w') do |f| 
  (ARGV[0].to_i*1048576).times {f.write(1) }
end
Run Code Online (Sandbox Code Playgroud)

这样做的最佳方式是什么(以独立于平台的方式?)

tex*_*uce 6

在*nix中,使用dd:

system("dd if=/dev/zero of=" + f + " bs=1 count=0 seek=" + ARGV[0] + "M");
Run Code Online (Sandbox Code Playgroud)

如果您想在文件中使用某些内容(而不是零),请使用

/dev/random
Run Code Online (Sandbox Code Playgroud)

用于if代替/dev/zero

如果您需要非稀疏文件,请使用

bs=#{ARGV[0]}M
Run Code Online (Sandbox Code Playgroud)

并省略 seek


通用方法:

#Create a 1M fill buffer
fills = '1'*1048576
File.open("file-#{ARGV[0]}M.txt", 'w') do |f| 
  (ARGV[0].to_i).times {f.write(fills) }
end
Run Code Online (Sandbox Code Playgroud)

它与您拥有的类似,但它一次写入1M.你一次写1个字节,这会给硬盘的搜索和写入带来很多开销.一次写入1M会快得多.如果您有更快的硬盘驱动器(如16M/s),您可以尝试将1M增加到16M.