【问题标题】: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()
    

    【讨论】:

    • 谢谢!正是我想要的。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-29
    • 2017-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多