创建大文件的最快方法?

时间:2012-11-08 20:21:20

标签: 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

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

2 个答案:

答案 0 :(得分:5)

在* nix中,使用dd

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

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

/dev/random

代表if

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

/dev/zero

并省略bs=#{ARGV[0]}M


通用方法:

seek

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

答案 1 :(得分:3)

纯Ruby选项:

n = ARGV[0] or exit 1
File.open("file-#{n}M.txt", 'w') do |f| 
  contents = "x" * (1024*1024)
  n.to_i.times { f.write(contents) }
end