【问题标题】:Ruby increase file size on the fly for testingRuby 动态增加文件大小以进行测试
【发布时间】:2011-07-03 09:24:41
【问题描述】:
这听起来可能很奇怪,或者您为什么要这样做。
我正在尝试编写一个黄瓜功能来测试上传大图像文件 (>16M) 所以,我不想将大文件存储在 github 或我的项目中。我正在使用 imagemagick 创建图像,但据我所知只有 1M。我可以增加红宝石的文件大小吗?我不关心文件中的内容,只关心文件大小。谢谢,无论如何我可以欺骗黄瓜相信我我正在上传一个大文件吗?
谢谢
【问题讨论】:
标签:
ruby-on-rails
ruby
cucumber
imagemagick
【解决方案1】:
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 KB 的磁盘空间,因为 dd(1) 的 seek 参数导致它开始“写入”文件。如果读取较早的字节,操作系统将提供无穷无尽的零流。 (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
只是 ruby 代码:
f=File.new("100MB", "w")
f.seek(100000 * 1024)
f.write("hello")
f.close()