Ruby会随时增加文件大小以进行测试

时间:2011-07-03 09:24:41

标签: ruby-on-rails ruby cucumber imagemagick

这可能听起来很奇怪,或者你为什么要那样做。

我正在尝试编写黄瓜功能来测试上传大图像文件(> 16M)所以,我不想将大文件存储在github或我的项目中。我正在使用imagemagick创建一个图像,但据我所能做的只有1M。我可以在ruby中增加文件大小吗?我不关心文件里面的内容,只关心文件大小。谢谢,无论如何我可以欺骗黄瓜相信我,我上传的文件很大?

由于

1 个答案:

答案 0 :(得分:7)

dd(1)工具可以在使用极少的磁盘空间时使文件非常大:

$ dd if=/dev/zero of=huge bs=1024 count=1 seek=100000
1+0 records in
1+0 records out
1024 bytes (1.0 kB) copied, 4.9857e-05 s, 20.5 MB/s
$ ls -lh huge
-rw-r--r-- 1 user user 98M 2011-07-03 02:43 huge
$ du -h huge 
12K huge

文件huge看起来是102400000字节长。 (大约98M。)但它只需要12千字节的磁盘,因为seek dd(1)参数导致它开始写入“文件”。如果读取前面的字节,操作系统将提供无穷无尽的零。 (0x00种零,不是ASCII类型的零:“0”。)

如果你想在Ruby中复制它,你可以使用File#seek函数:

irb> f=File.new("huge", "w")
=> #<File:huge>
irb> f.seek(100000 * 1024)
=> 0
irb> f.write("hello")
=> 5
irb> f.close()
=> nil
irb> ^D
$ ls -lh huge
-rw-r--r-- 1 sarnold sarnold 98M 2011-07-03 02:47 huge

红宝石代码:

f=File.new("100MB", "w")
f.seek(100000 * 1024)
f.write("hello")
f.close()