Что такое хороший метод для создания огромного тестового файла? - PullRequest
1 голос
/ 01 апреля 2009

Я пытаюсь протестировать некоторый код загрузки / выгрузки потокового файла, который я только что написал, но мне нужен огромный (больше, чем моя память, как в> 4 ГБ) файл для тестирования. Какой хороший способ быстро создать файл определенного размера (но без особых данных внутри)?

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

Ответы [ 7 ]

9 голосов
/ 01 апреля 2009

В Unix это легко:

head -c <numbytes> /dev/random > bigfile.dat

Таким образом, для 4 гигабайт это будет приблизительно :

head -c 4294967296 /dev/random > bigfile.dat
6 голосов
/ 02 апреля 2009

В * nix системах вы можете создать разреженный файл, который вряд ли будет использовать реальное дисковое пространство.

dd if=/dev/zero bs=1 seek=4294967295 count=1 of=4G
ls -l 4G
-rw-r--r-- 1 me wheel 4294967296 2009-04-01 13:28 4G

Это создает файл с отверстием размером 4 ГБ - 1 в начале. Дыра не потребляет блоки файловой системы. Вы даже можете создавать разреженные файлы, которые слишком велики для вашей файловой системы. Чтение из дыры возвращает нули.

5 голосов
/ 02 апреля 2009

В Windows вы также можете использовать команду fsutil:

Usage : fsutil file createnew <filename> <length>
   Eg : fsutil file createnew C:\testfile.txt 1000

Это создаст файл с именем testfile.txt размером 1000 байт. Однако файл содержит только NUL, если это имеет значение.

1 голос
/ 02 апреля 2009

Вот функция , чтобы сделать это в Windows PowerShell:

function Create-TestFile([string]$location, [long]$sizeInBytes, [int]$numberOfFiles = 1 ,[char]$fillerChar="X")
{
$fc = new-object string ($fillerChar, $sizeInBytes ) ;
1..$numberOfFiles | %{ [io.file]::WriteAllText("$location\TestFile-$_.txt", $fc) }
}

А вот как вы бы это использовали:

Create-TestFile "C:\temp" 2100 #creates a file 2100 bytes in size.
1 голос
/ 01 апреля 2009

На * nix-платформе вы можете сделать что-то вроде этого:

dd if=/dev/zero of=test5000M.bin bs=5000000000 count=1

Который сгенерирует файл размером 5000 Мбайт, полный ничего.

На окнах что-то вроде этого должно работать:

fsutil file createnew test5000M.bin 5000000000
0 голосов
/ 02 апреля 2009

Раньше я использовал утилиту eatbits.exe. Где вы могли бы создать эти файлы. Они очень ценны для тестирования установки.

Я нигде не мог найти еду в сети, возможно, это была внутренняя утилита в компании, в которой я работал.

0 голосов
/ 02 апреля 2009

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

Однако, в зависимости от размера, который вы используете, может произойти сбой. (Около предела 1,2 ТБ, по моему опыту на WinXP)

Я успешно использовал этот метод для приложения для записи на жесткий диск для нескольких различных конфигураций системы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...