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

toy*_*toy 4 ruby ruby-on-rails imagemagick cucumber

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

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

谢谢

sar*_*old 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
Run Code Online (Sandbox Code Playgroud)

该文件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
Run Code Online (Sandbox Code Playgroud)

红宝石代码:

f=File.new("100MB", "w")
f.seek(100000 * 1024)
f.write("hello")
f.close()
Run Code Online (Sandbox Code Playgroud)