Быстрое создание большого файла в системе Windows

в том же духе, что и быстро создайте большой файл в системе Linux, Я хотел бы быстро создать большой файл в системе Windows. По большому счету я думаю 5 ГБ. Содержание не имеет значения. Встроенная команда или короткий пакетный файл были бы предпочтительнее, но я приму приложение, если нет других простых способов.

20 ответов


fsutil file createnew <filename> <length>

здесь <length> в байт.

fsutil требует административных привилегий.



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

Если вы хотите создать файл с реальными данными, то вы можете использовать ниже скрипта.

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

(указанные выше две команды, одна за другой, или вы можете добавить их в пакетный файл.)

вышеуказанные команды создают фиктивный файл размером 1 МБ.txt, в течение нескольких секунд...


Проверьте RDFC http://www.bertel.de/software/rdfc/index-en.html

RDFC, вероятно, не самый быстрый, но он выделяет блоки данных. Абсолютно быстрый должен был бы использовать API более низкого уровня, чтобы просто получить цепочки кластеров и поместить их в MFT без записи данных.

остерегайтесь, что здесь нет серебряной пули - если "создание" возвращается мгновенно, это означает, что у вас есть разреженный файл, который просто подделывает большой файл, но вы не получите блоки данных / цепочки, пока вы не запишете в него. Если вы только что прочитали, вы получите очень быстрые нули, которые могут заставить вас поверить, что ваш диск внезапно стал невероятно быстрым :-)


Регистрация Средства Набора Ресурсов Windows Server 2003. Существует утилита под названием Creatfil.

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

это похоже на mkfile на Solaris.


мне нужен был обычный файл 10 GB для тестирования, поэтому я не мог использовать fsutil потому что он создает разреженные файлы (спасибо @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

Я хотел создать файл 10 GB, но по какой-то причине он появился только как 4 GB, поэтому я хотел быть в безопасности и остановился на 4 GB. Если вы действительно хотите быть уверены, что ваш файл будет правильно обработан операционной системой и другими приложениями, прекратите его расширение на 1 ГБ.


использование:

/*
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;
}

Я нашел отличную утилиту, которая настраивается на https://github.com/SL5R0/GenFile.

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


Откройте Диспетчер задач Windows, найдите самый большой процесс, который у вас работает правой кнопкой мыши, и нажмите на Create dump file.

это создаст файл относительно размера процесса в памяти во временной папке.

вы можете легко создать файл размером в гигабайт.

Enter image description here

Enter image description here


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

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

за исключением написания полного приложения, мы, ребята Python, можем получить файлы любого размера с четырьмя строками, тот же фрагмент в Windows и Linux (os.stat() строка - это просто проверка):

>>> 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
>>>

равнина ол' С... это строится под MinGW GCC на Windows XX и должно работать на любой универсальная платформа с.

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

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

#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);
}

Я нашел решение с помощью DEBUG at http://www.scribd.com/doc/445750/Create-a-Huge-File, но я не знаю простого способа его написания, и он, похоже, не может создавать файлы размером больше 1 ГБ.


... 1 MB файл пустышка.txt, в течение нескольких секунд.

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

смотрите здесь : http://www.windows-commandline.com/how-to-create-large-dummy-file/


временные файлы должны храниться в папке Windows Temp. На основе ответ от штанги вы можете использовать следующую строку для создания файла temp объемом 5 ГБ, который возвращает имя файла

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

объяснение:

  • [System.IO.Path]::GetTempFileName() генерирует случайное имя файла со случайным расширением в папке Windows Temp
  • конвейер используется для передачи имени [System.IO.File]::Create($_) который создает файл
  • имя файла установлено в недавно созданный файл с .SetLength(5gb). Я был немного удивлен, обнаружив, что PowerShell поддерживает Байт Преобразования, что очень полезно.
  • дескриптор файла должен быть закрыт с .close чтобы другие приложения могли получить к нему доступ
  • С ;$_ имя файла возвращается и с | ? { $_ } гарантируется, что возвращается только имя файла, а не пустая строка, возвращаемая [System.IO.File]::Create($_)

недавно я искал способ создать большой фиктивный файл с выделением пространства. Все решения выглядят неловко. Наконец, я просто начал DISKPART утилита в Windows (встроенная с Windows Vista):

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

здесь максимум является результирующим размером файла, 20 ГБ здесь.


простой ответ в Python: если вам нужно создать большой реальный текстовый файл, я просто использовал простой while цикл и смог создать файл 5 ГБ примерно за 20 секунд. Я знаю, что это грубо, но достаточно быстро.

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()

вы можете попробовать этот код на C++:

    #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);
        }
    }

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


быстро выполнить или быстро ввести на клавиатуре? Если вы используете Python в Windows, вы можете попробовать следующее:

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

Я сделал некоторые дополнения к тому же fsutil метод, как указано в выбранном ответе. Это для создания файлов различных расширений и/или различных размеров.

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

код можно клонировать из https://github.com/iamakidilam/bulkFileCreater.git