Создать файл заданного размера windows

Иногда бывают ситуации, в которых требуется быстро создать один или несколько файлов произвольного размера. Операционная система Windows предлагает для этого несколько различных вариантов.

Создание файла с помощью fsutil

Быстрее и проще всего создать файл с помощью утилиты командной строки fsutil. Для примера откроем консоль (обязательно с правами администратора) и создадим на диске E файл file.txt размером 1ГБ командой:

fsutil file createnew E:\File.txt 1000000000

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

создание файла с помощью fsutil

Создание файла с помощью PowerShell

То же самое можно сделать с помощью PowerShell, хотя команды будут немного сложнее:

$file = New-Object -TypeName System.IO.FileStream -ArgumentList E:\File.txt,Create,ReadWrite
$file.SetLength(1000Mb)
$file.Close()

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

создание файла с помощью PowerShell, способ 1

Есть и еще один, альтернативный способ создания файла с помощью PowerShell. Если в первом случае мы создавали файл и задавали его размер, то здесь создаем содержимое нужного размера и помещаем это содержимое в указанный файл. Например:

$content = New-Object -TypeName Byte[] -ArgumentList 10Mb
Set-Content -Path E:\File.txt -Value $content -Encoding Byte

создание файла с помощью PowerShell, способ 2

При использовании этого метода создание файла занимает некоторое время, зависящее от размера файла. Кроме того, с его помощью невозможно создать файл большого размера. Максимальный размер файла ограничен встроенным значением [int]::MaxValue и при его превышении будет выдана ошибка ″Array dimentions exceeded supported range″.

ошибка при создании файла

Все описанные  способы создают пустые файлы (точнее файлы, заполненные символом NUL). Если надо создать файл заданного размера и заполнить его каким либо произвольным содержимым, то можно немного изменить предыдущий способ и воспользоваться такими командами:

$array = New-Object -TypeName Byte[] -ArgumentList 10Mb
$obj = New-Object -TypeName System.Random
$obj.NextBytes($array)
Set-Content -Path E:\File.txt -Value $array -Encoding Byte

создание файла и заполнение его данными

Ну и для генерации большого количества файлов (напр. 1000) можно воспользоваться таким скриптом:

$array = New-Object -TypeName Byte[] -ArgumentList 10Mb
$obj = New-Object -TypeName System.Random
$obj.NextBytes($array)
for ($i=1; $i -le 1000; $i++) {
Set-Content -Path E:\File.txt$i -Value $array -Encoding Byte
}

Работает небыстро, но для ускорения можно запустить скрипт в несколько потоков.

В повседневной работе по той или иной причине системному администратору периодически приходится создавать файлы определенного размера. Обычно необходимость в создании файла определенного размера возникает при тестировании различных подсистем, например вы хотите протестировать работу дисковых квот или фильтров электронной почты. Самый простой способ создать файл определенного размера – воспользоваться Windows-утилитой fsutil.exe. Эта утилита командной строки, которую можно использовать для управления дисковыми квотами, различными манипуляциями с объектами файловой системы, а также для выполнения различных манипуляций с файлами.

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

fsutil file createnew C:\10mb-file.txt 10000000

Эта команда создаст в корне диска C:\ новый файл с именем ’10mb-file.txt’, размером 10000000 байт (10 Мб).

In the same vein as Quickly create a large file on a Linux system,
I’d like to quickly create a large file on a Windows system. By large I’m thinking 5 GB. The content doesn’t matter. A built-in command or short batch file would be preferable, but I’ll accept an application if there are no other easy ways.

Peter Mortensen's user avatar

asked Jun 11, 2009 at 18:01

Leigh Riffel's user avatar

Leigh RiffelLeigh Riffel

6,3913 gold badges34 silver badges48 bronze badges

fsutil file createnew <filename> <length>

where <length> is in bytes.

For example, to create a 1MB (Windows MB or MiB) file named ‘test’, this code can be used.

fsutil file createnew test 1048576

fsutil requires administrative privileges though.

DxTx's user avatar

DxTx

3,0593 gold badges23 silver badges34 bronze badges

answered Jun 12, 2009 at 10:37

Patrick Cuff's user avatar

Patrick CuffPatrick Cuff

28.6k12 gold badges68 silver badges94 bronze badges

10

You can use the Sysinternals Contig tool. It has a -n switch which creates a new file of a given size. Unlike fsutil, it doesn’t require administrative privileges.

answered Jun 11, 2009 at 19:12

Joey's user avatar

6

I was searching for a way to generate large files with data, not just sparse file. Came across the below technique:

If you want to create a file with real data then you can use the below command line script.

echo "This is just a sample line appended to create a big file.. " > dummy.txt
for /L %i in (1,1,14) do type dummy.txt >> dummy.txt

(Run the above two commands one after another or you can add them to a batch file.)

The above commands create a 1 MB file dummy.txt within few seconds…

gnat's user avatar

gnat

6,215109 gold badges53 silver badges73 bronze badges

answered May 18, 2011 at 8:46

Giri's user avatar

GiriGiri

5125 silver badges9 bronze badges

2

Check out RDFC http://www.bertel.de/software/rdfc/index-en.html

RDFC is probably not the fastest, but it does allocate data blocks. The absolutely fastest would have to use lower level API to just obtain cluster chains and put them into MFT without writing data.

Beware that there’s no silver bullet here — if «creation» returns instantly that means you got a sparse file which just fakes a large file, but you won’t get data blocks/chains till you write into it. If you just read is you’d get very fast zeros which could make you believe that your drive all of the sudden got blazingly fast :-)

Peter Mortensen's user avatar

answered Dec 21, 2010 at 20:36

ZXX's user avatar

ZXXZXX

4,68427 silver badges35 bronze badges

2

Open up Windows Task Manager, find the biggest process you have running right click, and click on Create dump file.

This will create a file relative to the size of the process in memory in your temporary folder.

You can easily create a file sized in gigabytes.

Enter image description here

Enter image description here

Peter Mortensen's user avatar

answered Apr 10, 2016 at 4:23

shenku's user avatar

shenkushenku

12k12 gold badges64 silver badges118 bronze badges

1

I needed a regular 10 GB file for testing, so I couldn’t use fsutil because it creates sparse files (thanks @ZXX).

@echo off

:: Create file with 2 bytes
echo.>file-big.txt

:: Expand to 1 KB
for /L %%i in (1, 1, 9) do type file-big.txt>>file-big.txt

:: Expand to 1 MB
for /L %%i in (1, 1, 10) do type file-big.txt>>file-big.txt

:: Expand to 1 GB
for /L %%i in (1, 1, 10) do type file-big.txt>>file-big.txt

:: Expand to 4 GB
del file-4gb.txt
for /L %%i in (1, 1, 4) do type file-big.txt>>file-4gb.txt

del file-big.txt

I wanted to create a 10 GB file, but for some reason it only showed up as 4 GB, so I wanted to be safe and stopped at 4 GB. If you really want to be sure your file will be handled properly by the operating system and other applications, stop expanding it at 1 GB.

answered May 25, 2012 at 12:51

f.ardelian's user avatar

f.ardelianf.ardelian

6,7368 gold badges36 silver badges53 bronze badges

7

Check the Windows Server 2003 Resource Kit Tools. There is a utility called Creatfil.

 CREATFIL.EXE
 -? : This message
 -FileName -- name of the new file
 -FileSize -- size of file in KBytes, default is 1024 KBytes

It is the similar to mkfile on Solaris.

Samir's user avatar

Samir

1,2531 gold badge15 silver badges27 bronze badges

answered Jun 11, 2009 at 18:06

Byron Whitlock's user avatar

Byron WhitlockByron Whitlock

52.8k28 gold badges123 silver badges168 bronze badges

7

I was looking for a way to create a large dummy file with space allocation recently. All of the solutions look awkward. Finally I just started the DISKPART utility in Windows (embedded since Windows Vista):

DISKPART
CREATE VDISK FILE="C:\test.vhd" MAXIMUM=20000 TYPE=FIXED

Where MAXIMUM is the resulting file size, 20 GB here.

Peter Mortensen's user avatar

answered Jul 7, 2016 at 12:55

chersun's user avatar

chersunchersun

2253 silver badges7 bronze badges

3

PowerShell one-liner to create a file in C:\Temp to fill disk C: leaving only 10 MB:

[io.file]::Create("C:\temp\bigblob.txt").SetLength((gwmi Win32_LogicalDisk -Filter "DeviceID='C:'").FreeSpace - 10MB).Close

Peter Mortensen's user avatar

answered Apr 28, 2016 at 6:27

Rod's user avatar

RodRod

1,45315 silver badges17 bronze badges

2

Short of writing a full application, us Python guys can achieve files of any size with four lines, same snippet on Windows and Linux (the os.stat() line is just a check):

>>> f = open('myfile.txt','w')
>>> f.seek(1024-1) # an example, pick any size
>>> f.write('\x00')
>>> f.close()
>>> os.stat('myfile.txt').st_size
1024L
>>>

Peter Mortensen's user avatar

answered Jun 11, 2009 at 18:20

gimel's user avatar

gimelgimel

83.6k10 gold badges77 silver badges105 bronze badges

3

The simplest way I’ve found is this free utility: http://www.mynikko.com/dummy/

Creates dummy files of arbitrary size that are either filled with spaces or are filled with non-compressible content (your choice). Here’s a screenshot:

enter image description here

answered Dec 30, 2018 at 14:23

yosh m's user avatar

yosh myosh m

1831 silver badge3 bronze badges

Use:

/*
Creates an empty file, which can take all of the disk
space. Just specify the desired file size on the
command line.
*/

#include <windows.h>
#include <stdlib.h>

int main (int argc, char* ARGV[])
{
    int size;
    size = atoi(ARGV[1]);
    const char* full = "fulldisk.dsk";
    HANDLE hf = CreateFile(full,
                           GENERIC_WRITE,
                           0,
                           0,
                           CREATE_ALWAYS,
                           0,
                           0);
    SetFilePointer(hf, size, 0, FILE_BEGIN);
    SetEndOfFile(hf);
    CloseHandle(hf);
    return 0;
}

phuclv's user avatar

phuclv

38.2k15 gold badges157 silver badges477 bronze badges

answered Jun 11, 2009 at 23:51

lkurts's user avatar

lkurtslkurts

3882 silver badges6 bronze badges

1

I found an excellent utility that is configurable at https://github.com/acch/genfiles.

It fills the target file with random data, so there are no problems with sparse files, and for my purposes (testing compression algorithms) it gives a nice level of white noise.

yosh m's user avatar

yosh m

1831 silver badge3 bronze badges

answered Jun 25, 2012 at 18:41

MusikPolice's user avatar

MusikPoliceMusikPolice

1,6994 gold badges20 silver badges39 bronze badges

3

Temp files should be stored in the Windows Temp Folder. Based on the answer from Rod you can use the following one liner to create a 5 GB temp file which returns the filename

[System.IO.Path]::GetTempFileName() | % { [System.IO.File]::Create($_).SetLength(5gb).Close;$_ } | ? { $_ }

Explanation:

  • [System.IO.Path]::GetTempFileName() generates a random filename with random extension in the Windows Temp Folder
  • The Pipeline is used to pass the name to [System.IO.File]::Create($_) which creates the file
  • The file name is set to the newly created file with .SetLength(5gb). I was a bit surprised to discover, that PowerShell supports Byte Conversion, which is really helpful.
  • The file handle needs to be closed with .close to allow other applications to access it
  • With ;$_ the filename is returned and with | ? { $_ } it is ensured that only the filename is returned and not the empty string returned by [System.IO.File]::Create($_)

Community's user avatar

answered Feb 2, 2017 at 11:18

Florian Feldhaus's user avatar

Florian FeldhausFlorian Feldhaus

5,5872 gold badges38 silver badges46 bronze badges

Plain ol’ C… this builds under MinGW GCC on Windows XX and should work
on any ‘generic’ C platform.

It generates a null file of a specified size. The resultant file is NOT just a directory space-occupier entry, and in fact occupies the specified number of bytes. This is fast because no actual writes occur except for the byte written before close.

My instance produces a file full of zeros — this could vary by platform; this
program essentially sets up the directory structure for whatever data is hanging
around.

#include <stdio.h>
#include <stdlib.h>

FILE *file;

int main(int argc, char **argv)
{
    unsigned long  size;

    if(argc!=3)
    {
        printf("Error ... syntax: Fillerfile  size  Fname \n\n");
        exit(1);
    }

    size = atoi(&*argv[1]);

    printf("Creating %d byte file '%s'...\n", size, &*argv[2]);

    if(!(file = fopen(&*argv[2], "w+")))
    {
        printf("Error opening file %s!\n\n", &*argv[2]);
        exit(1);
    }

    fseek(file, size-1, SEEK_SET);
    fprintf(file, "%c", 0x00);
    fclose(file);
}

phuclv's user avatar

phuclv

38.2k15 gold badges157 silver badges477 bronze badges

answered Aug 10, 2012 at 21:23

Bill W's user avatar

1

You can try this C++ code:

#include<stdlib.h>
#include<iostream>
#include<conio.h>
#include<fstream>
#using namespace std;

int main()
{
    int a;
    ofstream fcout ("big_file.txt");
    for(;;a += 1999999999){
        do{
            fcout << a;
        }
        while(!a);
    }
}

Maybe it will take some time to generate depending on your CPU speed…

phuclv's user avatar

phuclv

38.2k15 gold badges157 silver badges477 bronze badges

answered Apr 5, 2013 at 18:40

NEt_Bomber's user avatar

1

You can use the cat powershell command.

First create a simple text file with a few characters. The more initial chars you enter, the quicker it becomes larger. Let’s call it out.txt. Then in Powershell:

cat out.txt >> out.txt

Wait as long as it’s necessary to make the file big enough. Then hit ctrl-c to end it.

answered Oct 12, 2019 at 11:50

Meghdad's user avatar

MeghdadMeghdad

1711 silver badge10 bronze badges

2

Quick to execute or quick to type on a keyboard? If you use Python on Windows, you can try this:

cmd /k py -3 -c "with open(r'C:\Users\LRiffel\BigFile.bin', 'wb') as file: file.truncate(5 * 1 << 30)"

answered Nov 21, 2017 at 15:05

Noctis Skytower's user avatar

Noctis SkytowerNoctis Skytower

21.5k16 gold badges79 silver badges118 bronze badges

Another GUI solution : WinHex.

“File” > “New” > “Desired file size” = [X]
“File” > “Save as” = [Name]

Contrary to some of the already proposed solutions, it actually writes the (empty) data on the device.

It also allows to fill the new file with a selectable pattern or random data :

“Edit” > “Fill file” (or “Fill block” if a block is selected)

answered Jul 15, 2019 at 16:14

GabrielB's user avatar

Simple answer in Python: If you need to create a large real text file I just used a simple while loop and was able to create a 5 GB file in about 20 seconds. I know it’s crude, but it is fast enough.

outfile = open("outfile.log", "a+")

def write(outfile):
    outfile.write("hello world hello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello world"+"\n")
    return

i=0
while i < 1000000:
    write(outfile)
    i += 1
outfile.close()

phuclv's user avatar

phuclv

38.2k15 gold badges157 silver badges477 bronze badges

answered Apr 24, 2014 at 21:41

jkdba's user avatar

jkdbajkdba

2,3983 gold badges23 silver badges33 bronze badges

In PowerShell…

$file = [System.IO.File]::Create("$pwd\1GB.dat")
$file.SetLength(1GB)
$file.Close()

answered Jul 7 at 4:25

DLT's user avatar

I’ve made some additions to the same fsutil method as mentioned in the chosen answer.
This is to create files of many different extensions and/or of various sizes.

set file_list=avi bmp doc docm docx eps gif jpeg jpg key m4v mov mp4 mpg msg nsf odt pdf png pps ppsx ppt pptx rar rtf tif tiff txt wmv xls xlsb xlsm xlsx xps zip 7z
set file_size= 1
for %%f in (%file_list%) do (
fsutil file createnew valid_%%f.%%f %file_size%
) > xxlogs.txt

The code can be cloned from https://github.com/iamakidilam/bulkFileCreater.git

answered Jul 9, 2018 at 14:07

Alan Pallath's user avatar

При тестировании разного рода подсистем нередко приходится создавать файлы определённого объёма. Например, это может понадобиться при проверке работы почтовых или каких-либо других фильтров, в которых применяется ограничение на объём передаваемых данных, а также при тестировании дисковых квот. Конечно, для этих целей можно использовать массив, скажем, из текстовых файлов, но это неудобно, да и точности добиться в таком случае будет очень сложно.

Так вот, в Windows есть специальная консольная утилита, которая позволяет создавать файлы определённого размера. Называется она fsutil.exe. Допустим, вам нужно создать файл размером 10 Мб. Откройте командную строку от имени администратора и выполните в ней вот такую команду:

fsutil file createnew D:\test10mb.txt 10485760

Создать файл строго заданного размера
В результате выполнения команды в корне диска D будет создан файл test10mb.txt размером 10485760 байт или 10 Мб. Это будет не совсем обычный текстовый файл и если вы его откроете в Notepad++ или шестнадцатеричном редакторе, то увидите, что он полностью заполнен нулевыми значениями. Кстати, вместо расширения TXT можно использовать BIN — результат будет тот же.

Загрузка…

На линухах я бы сделал так:

dd if=/dev/random of=storage.dvr bs=1024 count=30000000

В винде пользуюсь для создания пустых файлов заданного размера:
fsutil file createnew c:\storage.dvr 1074000000
А вот для заполненных данными… Может как-то так:

echo 1 > file
for /L %i in (1,1,1000) do echo %i >> file

PowerShell. Создает файл в C:\Temp, заполненяет диск C: оставляя только 10 МБ:

[io.file]::Create(«C:\temp\bigblob.txt»).SetLength((gwmi Win32_LogicalDisk -Filter «DeviceID=’C:'»).FreeSpace — 10MB).Close

Источник

Вопрос зачем это нужно? Если для очистки свободного пространства от старых данных то нужно гуглить по «wipe disk», если же для какой то другой цели есть самопальная утилита, которая как раз этим занимается, потом еще проверяет, что то что он записал и то что он потом считывает это одно и тоже.

  • Создать учетку майкрософт windows 10
  • Создать сетевой диск windows server
  • Создать установочный носитель windows 10 pro
  • Создать реанимационную флешку windows 10
  • Создать свое облако на windows