Ruby увеличивает размер файла на лету для тестирования - PullRequest
4 голосов
/ 03 июля 2011

Это может звучать странно, или почему вы хотите это сделать.

Я пытаюсь написать функцию огурца, чтобы проверить загрузку большого файла изображения (> 16M) Итак, я не хочу хранить большой файл на github или в моем проекте. Я использую imagemagick для создания изображения, но, насколько я могу, это просто 1M. Можно ли увеличить размер файла в рубине? Меня не волнует содержание внутри файла, только размер файла. Спасибо, могу ли я обмануть огурец, чтобы поверить мне, что я загружаю файлы большого размера?

Спасибо

1 Ответ

7 голосов
/ 03 июля 2011

Инструмент 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...