Szybko utwórz duży plik w systemie Windows

245

W tym samym stylu, co Szybkie tworzenie dużego pliku w systemie Linux , chciałbym szybko utworzyć duży plik w systemie Windows. Ogólnie myślę, że 5 GB. Treść nie ma znaczenia. Preferowane byłoby wbudowane polecenie lub krótki plik wsadowy, ale zaakceptuję aplikację, jeśli nie będzie innych łatwych sposobów.

Leigh Riffel
źródło

Odpowiedzi:

399
fsutil file createnew <filename> <length>

gdzie <length>jest w bajtach.

fsutil wymaga jednak uprawnień administratora.

Patrick Mankiet
źródło
6
@ZXX +1 Do moich celów potrzebowałem tylko systemu plików, aby zobaczyć miejsce jako niedostępne, ale twoje informacje są pomocne, jeśli ktoś tego potrzebuje.
Leigh Riffel,
22
Plik kreacji fsutil nie tworzy pliku rozrzedzonego.
Per Mildner
7
„fsutil sparse setflag temp.txt” ustawia flagę rzadkości, czyniąc ją rzadkim plikiem. „fsutil sparse setrange temp.txt 0 1024” ustawia zakres rzadkości :)
Coldblackice
czy istnieje sposób bez uprawnień administratora?
wizlog
3
@ZXX fsutil file createnewNIE tworzy rzadkich plików: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

Możesz użyć narzędzia Sysinternals Contig . Ma -nprzełącznik, który tworzy nowy plik o danym rozmiarze. W przeciwieństwie do fsutiltego nie wymaga uprawnień administracyjnych.

Joey
źródło
2
Łał! Bardzo szybki do pobrania i uruchomienia. Linia, której użyłem to m: \ contig -n M: \ SpaceBuffer.tmp 5368709120
Leigh Riffel
6
Chcesz tylko sprawdzić, czy jest to plik rzadki, czy plik zawiera dane?
slolife
2
Nie jest to rzadki plik (o ile mi wiadomo), a plik jest pusty.
Joey,
1
Jestem tutaj zdezorientowany ... jeśli jest to natychmiastowe i nie jest to rzadki plik, to w jaki sposób faktycznie zajmuje miejsce na dysku?
Jason S
2
@JasonS: contigskutecznie przechodzi do ostatniego bajtu i zapisuje tam pojedynczy 0(wystarczy spojrzeć za pomocą Monitora procesów). Windows następnie wypełnia resztę zerami. Jest to prawdopodobnie tak wydajne, jak to tylko możliwe w przypadku plików nielicznych, a utworzenie pliku o wielkości około 5 GiB zajmuje tylko kilka sekund, nawet na moim dysku twardym. Myślę, że wtedy próbowałem na dysku SSD lub z mniejszymi plikami. Jest to jednak dość szybkie (i zdecydowanie szybsze niż samodzielne zapisywanie wszystkich bajtów pustego pliku)
Joey
23

Szukałem sposobu generowania dużych plików z danymi, a nie tylko plików rzadkich. Spotkałem się z poniższą techniką :

Jeśli chcesz utworzyć plik z prawdziwymi danymi, możesz użyć poniższego skryptu wiersza poleceń.

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

(Uruchom powyższe dwa polecenia jeden po drugim lub możesz dodać je do pliku wsadowego.)

Powyższe polecenia tworzą plik 1 MB dummy.txt w ciągu kilku sekund ...

Giri
źródło
6
Wyciąg z powyższego linku: Jeśli chcesz utworzyć plik z prawdziwymi danymi, możesz użyć poniższego skryptu wiersza poleceń. 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 (Uruchom powyższe dwa polecenia jeden po drugim lub możesz dodać je do pliku wsadowego.) Powyższe polecenia tworzą plik 1 MB dummy.txt w ciągu kilku sekund.
Tony Stark,
Uwaga: Najpierw musisz skopiować pierwszy wiersz, nacisnąć Enter, a następnie skopiować drugi wiersz. Próbowałem skopiować cały skrypt do mojej powłoki, ale potem nic się nie stało.
Magiranu,
15

Sprawdź RDFC http://www.bertel.de/software/rdfc/index-en.html

RDFC prawdopodobnie nie jest najszybszy, ale alokuje bloki danych. Absolutnie najszybszy musiałby użyć interfejsu API niższego poziomu, aby uzyskać łańcuchy klastrów i umieścić je w MFT bez zapisywania danych.

Uważaj, że nie ma tu srebrnej kuli - jeśli „tworzenie” natychmiast powróci, oznacza to, że masz rzadki plik, który po prostu sfałszuje duży plik, ale nie dostaniesz bloków danych / łańcuchów, dopóki go nie napiszesz. Jeśli tylko przeczytasz, otrzymasz bardzo szybkie zera, które mogą sprawić, że uwierzysz, że twój napęd nagle stał się niesamowicie szybki :-)

ZXX
źródło
To wydaje się być najlepszą odpowiedzią. FSUTIL tworzy rzadki plik, który nie jest prawidłowym scenariuszem testowym w wielu przypadkach. Sysinternals contig nigdy nie wydaje mi się działać, kiedy używam polecenia typu „contig -n largefile.bin 6000000000, tworzy plik o wielkości 1,7 GB ... Dziękuję za RDFC, ponieważ działał idealnie przy pierwszej próbie i pisze w maksymalna prędkość zapisu na moim dysku ATA
Syclone0044
Jak powiedziano powyżej, FSUTIL „createnew” NIE tworzy rzadkich plików, po prostu przydziela (w MFT) żądaną przestrzeń do żądanego pliku, tj. Pełną przestrzeń. Jeśli następnie sprawdzisz właściwości pliku, przydzielony rozmiar (irytująco nazywany „rozmiarem na dysku”, ponieważ może być na dowolnym urządzeniu, które niekoniecznie jest „dyskiem”), jest podobny lub bardzo zbliżony do rzeczywistego rozmiaru. Prawdziwy rzadki plik całkowicie wypełniony zerami miałby bardzo mały przydzielony rozmiar. Jedynym znalezionym przeze mnie narzędziem, które może przekształcić plik niesparowany w plik sparse (i faktycznie zmniejszyć jego rozmiar, a nie tylko oflagować go), jest SparseTest.
GabrielB
13

Sprawdź narzędzia zestawu Windows Server 2003 Resource Kit . Istnieje narzędzie o nazwie Creatfil.

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

Jest podobny do pliku mk w systemie Solaris.

Byron Whitlock
źródło
1
Wolałbym nie pobierać zestawu zasobów.
Leigh Riffel,
potrzebujesz tylko 1 exe z zestawu zasobów, nie musisz mieć wszystkiego w systemie produkcyjnym.
Byron Whitlock,
1
Spróbuję, ale wolałbym nie mieć dodatkowej zależności plików.
Leigh Riffel,
Plik nie jest teraz dla mnie poprawnie pobierany, ale nie wyobrażam sobie, aby był szybszy niż narzędzie Contig wspomniane przez Johannesa Rossela.
Leigh Riffel,
1
Dzięki! Pobrany pakiet to rktools.exe, a po rozwinięciu ma 11,7 MB i 18,2 MB. Aha, i to jest „creatfil.exe”, a nie „createfil.exe”. Sam plik ma rozmiar 5,5 KB i to wszystko, czego naprawdę potrzebujesz. Generowanie pliku 1 GB na czterordzeniowym procesorze Intel 3,0 GHz zajęło mi mniej niż 1 minutę. Dzięki narzędziu fsutil.exe opisanemu powyżej utworzenie go zajmuje tylko ułamek sekundy. To prawda, że ​​to narzędzie tworzy rzadkie pliki. Jest jeszcze większy, ma 73,5 KB. Ten jest lepszy do generowania dużych plików do celów testowych.
Samir
11

Potrzebowałem zwykłego pliku 10 GB do testowania, więc nie mogłem go użyć, fsutilponieważ tworzy on rzadkie pliki (dzięki @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

Chciałem utworzyć plik 10 GB, ale z jakiegoś powodu pokazał się tylko jako 4 GB, więc chciałem być bezpieczny i zatrzymać na 4 GB. Jeśli naprawdę chcesz mieć pewność, że plik będzie poprawnie obsługiwany przez system operacyjny i inne aplikacje, przestań go rozszerzać przy wielkości 1 GB.

f. kardynał
źródło
Musisz użyć znaku jednoprocentowego, a nie podwójnego. Ponadto nie potrzebujesz dodatkowych spacji w nawiasach. Zedytuję to dla ciebie.
Samir
Z jakiego systemu operacyjnego korzystałeś tutaj, kolego? rmJest polecenie Unix / Linux, a delto polecenie DOS / Windows ...?
Samir
Czy to ma być plik wsadowy, czy należy wydawać te polecenia bezpośrednio w cmd? Pojedynczy znak procentu jest używany w cmd, jak, %iale w pliku wsadowym używasz podwójnego znaku procentu, jak %%i.
Samir
@Sammy: Zaczyna się @echo off, więc oczywiście jest .bat. Dlatego miał podwójne znaki procentowe.
f .ardelian
W porządku, możemy chcieć przywrócić znak podwójnego procentu. Dlaczego usuwasz file-4gb.txtprzed utworzeniem? Czy nie spowodowałoby to błędu? Czy rzeczywiście chciałeś stworzyć file-4gb.txtw tej linii? Lub zmienić nazwę starego file-big.txtpliku? Nie jest to jasne, nawet w przypadku pliku wsadowego. Jeśli chcesz zmienić nazwę, prawdopodobnie szukałeś polecenia ren. Jak ren file-big.txt file-4gb.txt. Myślę, że to myliłeś rm.
Samir,
7

Otwórz Menedżera zadań Windows, znajdź największy proces, który uruchomiłeś, kliknij prawym przyciskiem myszy i kliknij Create dump file.

Spowoduje to utworzenie pliku w stosunku do wielkości procesu w pamięci w folderze tymczasowym.

Możesz łatwo utworzyć plik o wielkości gigabajtów.

Wpisz opis zdjęcia tutaj

Wpisz opis zdjęcia tutaj

shenku
źródło
2
fajne rozwiązanie! Pomocne, jeśli masz uruchomionych wiele aplikacji, aby uzyskać różne rozmiary
Don Cheadle
6

Bez napisania pełnej aplikacji, my, ludzie Python, możemy osiągnąć pliki dowolnej wielkości za pomocą czterech linii, tego samego fragmentu w systemie Windows i Linux ( os.stat()wiersz jest tylko czekiem):

>>> 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
>>>
gimel
źródło
1
Instalowanie Pythona w celu rozwiązania jednego problemu jest naprawdę przesadą. Dlaczego nie użyć po prostu czegoś wbudowanego, takiego jak Powershell lub C # - gist.github.com/nadams810/6539070 (nie potrzebujesz nawet programu Visual Studio do kompilowania aplikacji w języku C #).
Natalie Adams,
1
.Net, C # i Powershell niekoniecznie są wieloplatformowe.
gimel
1
Są one wbudowane w system Windows, o co poprosił OP (zakładając, że Twój system jest w pełni aktualny).
Natalie Adams,
@NatalieAdams Ale ta odpowiedź jest bardzo pomocna, jeśli masz już zainstalowany Python do rozwiązywania innych problemów. :)
cryptych stoi z Monicą
6

Jedno-liniowy PowerShell do utworzenia pliku w C:\Tempcelu zapełnienia dysku C: pozostawiając tylko 10 MB:

[io.file]::Create("C:\temp\bigblob.txt").SetLength((gwmi Win32_LogicalDisk -Filter "DeviceID='C:'").FreeSpace - 10MB).Close
Pręt
źródło
3
czy utworzy plik z jakąś rzeczywistą zawartością lub rzadkim plikiem?
Samselvaprabu
6

Posługiwać się:

/*
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;
}
lkurts
źródło
Co to jest int? Czy to zadziała w przypadku pliku 5 GB? Czy jest to ograniczone do 2 lub 4 GB? To, że trzeci parametr SetFilePointer()to 0, sugeruje, że nie będzie działać dla pliku o pojemności 5 GB.
Peter Mortensen,
4

Ostatnio szukałem sposobu na utworzenie dużego pliku zastępczego z alokacją miejsca. Wszystkie rozwiązania wyglądają niezręcznie. Wreszcie uruchomiłem DISKPARTnarzędzie w systemie Windows (wbudowane od systemu Windows Vista):

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

Tam, gdzie MAKSYMALNY jest wynikowy rozmiar pliku, tutaj 20 GB.

chersun
źródło
Najlepsze rozwiązanie do tej pory.
Frank FYC,
Nie działa dla mnie. Niestety nie utworzono pliku. Próbowałem z uprawnieniami administratora.
Magiranu,
4

Znalazłem doskonałe narzędzie, które można skonfigurować na https://github.com/acch/genfiles .

Wypełnia plik docelowy losowymi danymi, więc nie ma problemów z plikami rzadkimi, a dla moich celów (testowanie algorytmów kompresji) daje całkiem niezły poziom białego szumu.

MusikPolice
źródło
To narzędzie to aplikacja Java z jednym plikiem, która powinna działać na dowolnej platformie z Javą.
Paul
@MusikPolice - Link is dead
dcp
Odnotowany. Niestety, stanie się to po sześciu latach.
MusikPolice,
3

Pliki tymczasowe powinny być przechowywane w folderze tymczasowym systemu Windows. Na podstawie odpowiedzi Rod możesz użyć następującego linera, aby utworzyć plik tymczasowy o pojemności 5 GB, który zwraca nazwę pliku

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

Wyjaśnienie:

  • [System.IO.Path]::GetTempFileName() generuje losową nazwę pliku z losowym rozszerzeniem w folderze Temp systemu Windows
  • Rurociąg służy do przekazania nazwy, do [System.IO.File]::Create($_)której tworzony jest plik
  • Nazwa pliku jest ustawiona na nowo utworzony plik za pomocą .SetLength(5gb). Byłem trochę zaskoczony odkryciem, że PowerShell obsługuje Byte Conversion , co jest naprawdę pomocne.
  • Uchwyt pliku musi być zamknięty, .closeaby umożliwić innym aplikacjom dostęp do niego
  • Z ;$_nazwą pliku jest zwracana i | ? { $_ }jest zapewnione, że zwracana jest tylko nazwa pliku, a nie pusty ciąg znaków[System.IO.File]::Create($_)
Florian Feldhaus
źródło
3

Najprostszym sposobem, jaki znalazłem, jest to bezpłatne narzędzie: http://www.mynikko.com/dummy/

Tworzy fikcyjne pliki o dowolnym rozmiarze, które są wypełnione spacjami lub są wypełnione treściami nieściśliwymi (do wyboru). Oto zrzut ekranu:

wprowadź opis zdjęcia tutaj

yosh m
źródło
3

Plain ol 'C ... to kompilacja pod MinGW GCC w systemie Windows XX i powinna działać na dowolnej „ogólnej” platformie C.

Generuje plik zerowy o określonym rozmiarze. Wynikowy plik NIE jest po prostu pozycją zajmującą przestrzeń katalogu, a w rzeczywistości zajmuje określoną liczbę bajtów. Jest to szybkie, ponieważ nie występują żadne rzeczywiste zapisy, z wyjątkiem bajtu zapisanego przed zamknięciem.

Moja instancja tworzy plik pełen zer - może się to różnić w zależności od platformy; ten program zasadniczo konfiguruje strukturę katalogów dla dowolnych wiszących danych.

#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);
}
Bill W.
źródło
Sugeruję sprawdzenie, jak sformatowałem kod. I BTW. pytanie ma już bardzo dobrą odpowiedź, a fseek + fwrite zostało już zaprezentowane w Pyton i WinAPI, więc to niewiele pomaga. Fajnie, ale podałeś pełny przykład. +1 za to. Ale staraj się nie odpowiadać na już rozwiązane pytania, to tylko strata czasu, w którym możesz komuś pomóc trochę więcej :)
quetzalcoatl
2

Znalazłem rozwiązanie za pomocą DEBUG na stronie http://www.scribd.com/doc/445750/Create-a-Huge-File , ale nie znam łatwego sposobu na napisanie skryptu i wydaje się, że nie jest w stanie tworzyć pliki większe niż 1 GB.

Leigh Riffel
źródło
1
nie możesz utworzyć 5 plików, a następnie dołączyć je? Utwórz je jednocześnie, używając wątków, a następnie
dołącz
Nie wiem, czy mógłbym wątkować bez programowania, ale tak, mogę skopiować plik kilka razy, aby uzyskać potrzebny rozmiar. W moim przypadku sam plik nie musi mieć wielkości 5 GB, tylko zajęte miejsce.
Leigh Riffel,
2
Zapisywanie do wielu plików za pomocą wątków brzmi jak okropny pomysł, biorąc pod uwagę, jak powolne są dyski twarde ... Ponadto dołączanie ich jest dość drogie pod względem czasu, więc prawdopodobnie nie spełnia kryteriów „szybkich”.
Joey,
2

Możesz użyć polecenia cat powershell.

Najpierw utwórz prosty plik tekstowy z kilkoma znakami. Im więcej początkowych znaków wprowadzisz, tym szybciej będzie ono większe. Nazwijmy to out.txt. Następnie w PowerShell:

cat out.txt >> out.txt

Poczekaj, aż plik będzie wystarczająco duży. Następnie naciśnij ctrl-c, aby go zakończyć.

Meghdad
źródło
1

Możesz wypróbować ten kod 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);
    }
}

Może wygenerowanie zajmie trochę czasu w zależności od szybkości procesora ...

NEt_Bomber
źródło
Plakat zapytał szybko. Wymagałoby to instalacji kompilatora C ++.
1

Prosta odpowiedź w Pythonie: jeśli chcesz utworzyć duży prawdziwy plik tekstowy, użyłem prostej whilepętli i byłem w stanie utworzyć plik 5 GB w około 20 sekund. Wiem, że to prymitywne, ale wystarczająco szybkie.

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()
jkdba
źródło
0

Szybkie wykonanie lub szybkie pisanie na klawiaturze? Jeśli używasz Pythona w systemie Windows, możesz spróbować:

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

Inne rozwiązanie GUI: WinHex.

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

W przeciwieństwie do niektórych z już zaproponowanych rozwiązań, faktycznie zapisuje (puste) dane na urządzeniu.

Pozwala również wypełnić nowy plik wybranym wzorem lub losowymi danymi:

“Edit” > “Fill file” (or “Fill block” if a block is selected)
Gabriel B.
źródło
-1

Wprowadziłem kilka dodatków do tej samej fsutilmetody, jak wspomniano w wybranej odpowiedzi. Ma to na celu tworzenie plików o wielu różnych rozszerzeniach i / lub o różnych rozmiarach.

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

Kod można sklonować z https://github.com/iamakidilam/bulkFileCreater.git

Alan Pallath
źródło