Создать файл произвольного размера со случайными данными в Windows

Я ищу приложение, которое создаст файл произвольного размера, заполненный псевдослучайными данными.

Должна быть возможность создавать файлы размером не менее 1 ГБ (чем больше, тем лучше).

Приложение должно работать в , но может иметь инструмента командной строки .

Данные не должны быть действительно случайными, только псевдослучайными.

Программное обеспечение должно быть .

Я предпочитаю программное обеспечение с кодом, но ни то, ни другое не является обязательным.

Примечание . Windows 7 с пакетом обновления 1 (SP1) — это самая ранняя версия Windows, которую необходимо поддерживать.

Затем вы можете использовать встроенный wsh для сценария, но rdfc, вероятно, проще (если у вас не установлен Python)
Обратите внимание, что скорость является важным аспектом, который необходимо учитывать для такого рода инструментов. Я не тестировал решение с Python, но я быстро собрал базовый сценарий PowerShell, и производительность была ужасной даже для файла размером 1 МБ. RDFC и dd работают очень быстро.
mguassa, PowerShell работает быстро, если вы используете что-то вроде предложенного здесь: stackoverflow.com/questions/49835860/…

Ответы (7)

Вы можете использовать Создатель файлов случайных данных (RDFC).

Random Data File Creator, сокращенно RDFC, представляет собой консольное приложение для Microsoft Windows, которое можно использовать для создания бинарных файлов любого размера, заполненных случайными числами. Так, например, разработчики могут создавать очень большие файлы (т.е. 1 ТБ), чтобы проверить, как с ними справляется их собственное приложение.

Вот тест, который я только что запустил в Windows 10, чтобы создать файл размером 100 МБ:

rdfc file.bin 100 MB

тест RDFC

Приложение является бесплатным и портативным (не требует установки).

Работает со скоростью 10 МБ/с, практически непригодна для использования.
Я могу подтвердить слова Властимила Овчачика: RDFC работает медленно. В моем случае 3,70 МБ/с при создании файла размером 100 МБ. Протестировано с Microsoft Windows 10.

Вы можете использовать Dummy File Creator :

  • Бесплатно для образовательных и некоммерческих личных целей
  • Портативный
  • Microsoft Windows (требуется Microsoft .NET Framework 3.5)
  • Графический интерфейс и интерфейс командной строки

введите описание изображения здесь

введите описание изображения здесь

  • возможность генерировать файл со случайным содержимым. True random в версии 1.1, но не в версии 1.2:

Dummy File Creator 1.2 записывает случайные байты в диапазоне от 0 до 255. Однако, в отличие от предыдущей версии, которая генерирует действительно случайное содержимое файла, Dummy File Creator 1.2 использует другой подход к генерации случайного содержимого, чтобы повысить производительность генерации случайного содержимого. Dummy File Creator теперь будет генерировать 4 МБ случайных данных и повторно использовать одни и те же данные, изменяя только некоторые байты в случайных местах для каждой последующей записи. Хотя результат по-прежнему побеждает все протестированные нами программы сжатия (т. е. сжатый файл больше, чем исходный размер), но все же возможно сжать это псевдослучайное содержимое, если специально разработанный алгоритм сжатия нацелен на создателя фиктивных файлов (очень маловероятно). ) используется. Для разработки такого алгоритма он должен использовать словарные слова длиной от 1 до 4 194 303 байт.

Лучший инструмент, который я когда-либо видел, он невероятно быстр!

dd для Windows является переносимым и имеет открытый исходный код .

Это Windows-версия популярной утилиты dd для Unix .

Вот пример создания файла размером 100 МБ:

dd bs=100M count=1 if=/dev/random of=C:\tmp\file.dat --progress

дд демо

Я использовал версию 0.5 в Windows 10.

Python является бесплатным, бесплатным и открытым исходным кодом, кросс-платформенным и может использоваться как скрипт или интерактивно — в зависимости от типа случайного содержимого, которое вам нужно, это будет так же просто, как:

from random import randint

desired_size = 1024*1024*1024 # 1 GByte
with open('RandomData.dat', 'wb') as outfile: # Open for binary output
    for x in xrange(desired_size):
       outfile.write(chr(randint(0,255))) # Write a random byte
print 'Done.'

Конечно, вы можете расширить вышеуказанное, чтобы запрашивать или получать в командной строке имя файла и желаемый размер, ограничивать диапазон или выводить случайный текст и т. д.

Я не хочу запоминать 6 строк кода для этого.
@VlastimilOvčáčík: Вы всегда можете пропустить сделанное и указать желаемый размер непосредственно в xrange, что сократит его до 4 строк, если у вас проблемы с памятью - :-)

В Python 3 для создания 25 файлов по 10 ГБ каждый:

import os
desired_size = 1024*1024*1024*10 # 10 GBytes
desired_number_of_files = 25
for file_number in range(desired_number_of_files):
    filename = 'output_file{0:04d}.dat'.format(file_number)
    print('filename: {0}'.format(filename))
    with open(filename, 'wb') as fout: fout.write(os.urandom(desired_size))
print('Done.')

Строка, которая генерирует данные (т.е. строка с urandom), взята из Jon Clements on Making random binary files . Кроме того, если вам интересно: в чем разница между os.urandom() и random? .

Скорость на моем компьютере (Microsoft Windows 10) составляет около 250 МБ/сек.

ПРЕДУПРЕЖДЕНИЕ. Чтобы сгенерировать файл размером 10 ГБ, этот фрагмент потребует 10 ГБ ОЗУ, поскольку он сначала буферизует случайную строку в память.
@ZaarHai Спасибо за отзыв, хороший момент, я не помню, что касается поведения памяти. Если это проблема, возможно, можно было бы добавить некоторые идеи очистки, упомянутые в разделе « Как часто python очищает файл?». .
Дело не в флеше. os.urandom(desired_size)сначала генерирует длинную строку 10 ГБ, которая занимает ОЗУ. Затем вы передаете его write(). Вам нужно сгенерировать эту большую строку кусками.
@ZaarHai спасибо, понял, извините, я слишком быстро прочитал код, я забыл, что цикл был для разных файлов, я думал, что все итерации нужно писать в один и тот же файл

. _

По сути, это обычные инструменты командной строки Unix/Linux, перенесенные в Windows.

dd if=/dev/random of=file.img bs=1048576 count=10240

... или около того, работает и здесь, как в отличном ответе @mguassa.

Я собирался внимательно изучить этот проект. Спасибо, Питер.

В Windows есть встроенная команда (работает при новой установке без стороннего программного обеспечения, но требует запуска от имени администратора)

fsutil file createnew bigfile.out 10737418240

Объяснение опции: bigfile.out — создаваемый файл (может включать полный путь) 10737418240 — размер файла в байтах (здесь 10 ГБ)

Утилита хорошая - но я бы удивился, если бы она создавала файл со случайными данными. Я думаю, что он создает файл, полный нулей.
Михал, не могли бы вы протестировать утилиту, чтобы убедиться, что предположение Питера верно, и объяснить результаты в своем ответе? У меня нет машины с Windows, чтобы попробовать. Документация об этом была бы еще лучше. Спасибо :-)