Швидке створення великого файлу в системі Windows


245

Так само, як швидко створити великий файл у системі Linux , я б хотів швидко створити великий файл у системі Windows. За великим рахунком я думаю про 5 ГБ. Зміст не має значення. Вбудований командний або короткий пакетний файл буде кращим, але я прийму заявку, якщо немає інших простих способів.

Відповіді:


399
fsutil file createnew <filename> <length>

де <length>знаходиться в байтах.

fsutil хоча адміністративні пільги вимагають.


6
@ZXX +1 Для моїх цілей мені просто потрібна файлова система, щоб побачити простір як недоступний, але ваша інформація корисна, якщо комусь це потрібно.
Лі Ріффер

22
fsutil file createnew не створює розріджений файл.
Per Mildner

7
"fsutil sparse setflag temp.txt" встановлює розріджений прапор, роблячи його розрідженим файлом. "fsutil sparse setrange temp.txt 0 1024" встановлює діапазон розрідженості :)
Coldblackice

чи існує спосіб без прав адміністратора?
wizlog

3
@ZXX fsutil file createnewНЕ створює розріджених файлів:c:\>fsutil file createnew test.txt 0x100000 File c:\test.txt is created c:\>fsutil sparse queryflag test.txt This file is NOT set as sparse
ivan_pozdeev

36

Можна скористатися інструментом Contig Sysinternals . Він має -nкомутатор, який створює новий файл заданого розміру. На відміну від цього fsutil, він не потребує адміністративних привілеїв.


2
Оце Так! Дуже швидко завантажувати та запускати. Я використовував рядок m: \ contig -n M: \ SpaceBuffer.tmp 5368709120
Leigh Riffel

6
Просто хочете перевірити, чи це файл із розрідженим файлом чи дійсно у нього є дані?
slolife

2
Це не рідкий файл (наскільки я знаю), а файл порожній.
Джої

1
Я тут заплутався ... якщо це миттєво, і це не рідкий файл, то як він насправді використовує дисковий простір?
Джейсон S

2
@JasonS: contigефективно переходить до останнього байта і записує сингл 0там (просто подивіться за допомогою Process Monitor). Потім Windows заповнює решту нулями. Це, мабуть, настільки ефективно, наскільки ви можете отримати з нечисленними файлами, а створення файлу розміром приблизно 5 Гб займає лише кілька секунд навіть на моєму жорсткому диску. Я думаю, тоді я спробував або на SSD, або з меншими файлами. Але це досить швидко (і, безумовно, швидше, ніж писати всі байти порожнього файлу самостійно.
Joey

23

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

Якщо ви хочете створити файл з реальними даними, тоді ви можете скористатися наведеним нижче сценарієм командного рядка.

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 Мб фіксований файл протягом декількох секунд ...


6
Витяг із посилання вище: Якщо ви хочете створити файл з реальними даними, тоді ви можете скористатися нижче скриптом командного рядка. 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 Мб фіксований файл за кілька секунд.
Тоні Старк

Увага: Перше потрібно скопіювати перший рядок, натиснути Enter і потім скопіювати другий рядок. Я спробував скопіювати весь сценарій у свою оболонку, але тоді нічого не було.
Магірану

15

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

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

Будьте уважні, що тут немає срібної кулі - якщо "створення" повернеться миттєво, це означає, що у вас є розріджений файл, який просто підробляє великий файл, але ви не отримаєте блоки даних / ланцюги, поки не впишете його. Якщо ви просто читаєте, ви отримаєте дуже швидкі нулі, які можуть змусити вас повірити, що ваш драйв раптом швидко зробив :-)


Це, здається, найкраща відповідь. FSUTIL створює розріджений файл, який не є дійсним сценарієм тестування для багатьох випадків. Здається, що контиг Sysinternals ніколи не працює для мене, коли я використовую таку команду, як "contig -n largefile.bin 6000000000, вона створює файл розміром 1,7 Гб ... Дякую за RDFC, що він прекрасно працював першою спробою і пише на максимальна швидкість запису мого диска ATA
Syclone0044,

Як вже було сказано вище, FSUTIL “createnew” НЕ створює розріджених файлів, він просто виділяє (у MFT) запитуваний простір для запитуваного файлу, тобто повний простір. Якщо потім перевірити властивості файлу, виділений розмір (дратівливо названий "розмір на диску", як це може бути на будь-якому пристрої, який не обов'язково є "диском") подібний або дуже близький до фактичного розміру. Справжній розріджений файл, повністю заповнений нулями, матиме дуже невеликий розмір. Єдиний інструмент, який я знайшов, який може перетворити нерозріджений файл у розріджений файл (і фактично зменшити його розмір, а не лише позначити його) - SparseTest.
ГабріельB

13

Перевірте Інструменти набору ресурсів 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.


1
Я б краще не завантажував набір ресурсів.
Лей Ріффер

вам знадобиться лише 1 екзе з набору ресурсів, вам не потрібно мати всю справу у виробничій системі.
Байрон Вітлок

1
Спробую, але я не матиму додаткової залежності файлу.
Лі Ріффер

Зараз файл не завантажується правильно для мене, але я не можу уявити, що він швидший, ніж інструмент Contig, згаданий Йоханнесом Росселем.
Лей Ріффер

1
Дякую! Завантажений пакет rktools.exe, при розширенні він становить 11,7 Мб і 18,2 Мб. О, і це "createfil.exe", а не "createfil.exe". Сам цей файл розміром 5,5 Кб, і це все, що вам дійсно потрібно. На створення четвероядерного процесора Intel 3,0 ГГц Intel CPU у мене пішло менше 1 хвилини. За допомогою інструменту fsutil.exe, як розміщено вище, для його створення потрібна лише частина секунди. Тож правда, цей інструмент створює розріджені файли. Він ще більший, він становить 73,5 Кб. Цей варіант краще для генерації великих файлів для тестування.
Самір

11

Мені потрібен був звичайний файл 10 Гб для тестування, тому я не зміг його використовувати, 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 ГБ, але він чомусь виявився лише як 4 ГБ, тому я хотів бути в безпеці і зупинився на 4 ГБ. Якщо ви дійсно хочете бути впевненими, що ваш файл буде належним чином оброблятися операційною системою та іншими програмами, припиніть розширювати його на 1 Гб.


Потрібно використовувати один відсотковий символ, а не подвійний. Крім того, вам не потрібні додаткові пробіли в дужках. Я відредагую це для вас.
Самір

Якою операційною системою ви тут користувалися, товариш? Команда rmUnix / Linux, а команда delDOS / Windows? ...
Самір

Це повинен бути пакетний файл або ви повинні видавати ці команди прямо в cmd? Знак одиничного відсотка використовується в cmd, як, %iале у пакетному файлі ви використовуєте подвійний знак відсотка, як %%i.
Самір

@Sammy: Це починається з @echo off, так що, очевидно, це .bat. Ось чому він мав подвійні відсотки знаків.
f.ardelian

Гаразд, тоді ми можемо захотіти повернути знак подвійного відсотка. Чому ви видаляєте file-4gb.txtперед створенням? Чи не призведе це до помилки? Ви насправді мали намір створити file-4gb.txtна цій лінії? Або перейменувати старий file-big.txtфайл? Це незрозуміло навіть для пакетного файлу. Якщо ви мали намір перейменувати його, то, мабуть, потрібна команда, яку ви шукали ren. Як ren file-big.txt file-4gb.txt. Думаю, ви з цим переплутали rm.
Самір

7

Відкрийте диспетчер завдань Windows, знайдіть найбільший процес, у якому запущено клацання правою кнопкою миші, і натисніть на Create dump file.

Це створить файл відносно розміру процесу в пам'яті у вашій тимчасовій папці.

Ви можете легко створити файл розміром у гігабайти.

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

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


2
приємне рішення! Корисно, якщо у вас запущені різні програми, щоб отримати різні розміри
Дон Чейдл

6

Окрім написання повної програми, хлопці з 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
>>>

1
Встановлення Python для вирішення однієї проблеми справді непосильне. Чому б просто не використовувати щось вбудоване в такі, як Powershell або C # - gist.github.com/nadams810/6539070 (вам навіть не потрібна Visual Studio для складання програм C #).
Наталі Адамс

1
.Net, C # і Powershell не обов'язково є платформою.
gimel

1
Вони вбудовані в Windows, і це те, про що вимагала ОП (якщо припустимо, що ваша система повністю оновлена)
Наталі Адамс

@NatalieAdams Але ця відповідь є дуже корисним , якщо у вас вже є Python встановлено для вирішення інших завдань. :)
криптич виступає з Монікою

6

Один лайнер PowerShell для створення файлу C:\Tempдля заповнення диска C: залишається лише 10 Мб:

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

3
чи створить файл із реальним вмістом чи розрідженим файлом?
Самсельвапрабу

6

Використання:

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

Що таке int? Чи буде це працювати для файлу 5 Гб? Чи обмежено це 2 або 4 ГБ? Якщо третій параметр SetFilePointer()дорівнює 0, це означає, що він не працюватиме для файлу об'ємом 5 ГБ.
Пітер Мортенсен

4

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

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

Тут розмір файлу MAXIMUM , 20 Гб тут.


Найкраще рішення поки що.
Френк FYC

Не працює для мене. На жаль, жоден файл не створений. Я намагався з адміністраторськими правами.
Magiranu

4

Я знайшов чудову утиліту, яку можна налаштувати на https://github.com/acch/genfiles .

Він заповнює цільовий файл випадковими даними, тому проблем із розрідженими файлами немає, і для моїх цілей (тестування алгоритмів стиснення) він дає хороший рівень білого шуму.


Ця утиліта - це однофайлова програма Java, яка повинна працювати на будь-якій платформі з Java.
Пол

@MusikPolice - Посилання мертве
dcp

Помічено. На жаль, це станеться через шість років.
MusikPolice

3

Файли тимчасових файлів слід зберігати у папці темпів Windows. На основі відповіді від Rod ви можете скористатися наступним одним вкладишем, щоб створити тимчасовий файл об'ємом 5 ГБ, який повертає ім'я файлу

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

Пояснення:

  • [System.IO.Path]::GetTempFileName() створює випадкове ім'я файлу з випадковим розширенням у папці темп Windows
  • Трубопровід використовується для передачі імені, до [System.IO.File]::Create($_)якого створюється файл
  • Ім'я файлу встановлюється на щойно створений файл за допомогою .SetLength(5gb). Я трохи здивований, виявивши, що PowerShell підтримує перетворення байтів , що дуже корисно.
  • Ручку файлу потрібно закрити, .closeщоб інші програми мали доступ до неї
  • З ;$_іменем файлу повертається і | ? { $_ }забезпечується, що повертається тільки ім'я файлу, а не порожня рядок, яку повертає[System.IO.File]::Create($_)

3

Найпростіший спосіб, який я знайшов, - це безкоштовна утиліта: http://www.mynikko.com/dummy/

Створює фіктивні файли довільного розміру, які або заповнені пробілами, або заповнені нестискаючим вмістом (на ваш вибір). Ось скріншот:

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


3

Звичайний ol 'C ... цей твір будується під 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);
}

Я пропоную вам перевірити, як я відформатував ваш код. І BTW. на питання вже є дуже хороша відповідь, і fseek + fwrite вже був представлений у Pyton та WinAPI, тому це мало допомагає. Приємно, проте ви надали повний приклад. +1 для цього. Але постарайтеся не відповідати на вже вирішені питання, це просто марнування часу, в якому ви могли б допомогти комусь трохи більше :)
quetzalcoatl

2

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


1
ви не можете створити 5 файлів, а потім додати їх? Створіть їх одночасно, використовуючи нитку, а потім додайте їх: D
dassouki

Я не знаю, чи зможу я пропустити його без програмування, але так, я можу скопіювати файл кілька разів, щоб отримати потрібний мені розмір. У моєму випадку мені не потрібно, щоб сам файл був 5 Гб, просто витрачений простір.
Лей Ріффер

2
Запис у кілька файлів із використанням ниток звучить як жахлива ідея, враховуючи, наскільки повільні жорсткі диски ... Крім того, додавання їх досить дороге за часом, так що, ймовірно, не відповідає "швидким" критеріям.
Joey


2

Ви можете скористатися командою cat cathell.

Спочатку створіть простий текстовий файл з кількома символами. Чим більше введених початкових знаків, тим швидше він стає більшим. Давайте назвемо це.t.txt. Потім у Powershell:

cat out.txt >> out.txt

Зачекайте, поки потрібно зробити файл досить великим. Потім натисніть ctrl-c, щоб закінчити його.


1

Ви можете спробувати цей 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);
    }
}

Можливо, це займе певний час, щоб генерувати залежно від швидкості вашого процесора ...


- швидко запитав плакат. Для цього знадобиться встановити компілятор C ++.

1

Проста відповідь в 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()

0

Швидке виконання або швидке введення на клавіатурі? Якщо ви використовуєте Python в Windows, ви можете спробувати це:

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

0

Ще одне рішення GUI: WinHex.

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

На відміну від деяких із запропонованих рішень, він фактично записує (порожні) дані на пристрій.

Він також дозволяє заповнити новий файл обраним малюнком або випадковими даними:

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

-1

Я вніс деякі доповнення до того ж 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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.