Erstellen Sie schnell eine große Datei auf einem Windows-System


245

Ähnlich wie beim schnellen Erstellen einer großen Datei auf einem Linux-System möchte ich schnell eine große Datei auf einem Windows-System erstellen. Im Großen und Ganzen denke ich 5 GB. Der Inhalt spielt keine Rolle. Ein eingebauter Befehl oder eine kurze Batchdatei wäre vorzuziehen, aber ich akzeptiere eine Anwendung, wenn es keine anderen einfachen Möglichkeiten gibt.

Antworten:


399
fsutil file createnew <filename> <length>

wo <length>ist in Bytes.

fsutil erfordert jedoch Administratorrechte.


6
@ZXX +1 Für meine Zwecke brauchte ich lediglich das Dateisystem, um den Speicherplatz als nicht verfügbar anzusehen, aber Ihre Informationen sind hilfreich, wenn jemand anderes dies benötigt.
Leigh Riffel

22
fsutil Datei createnew ist nicht eine spärliche Datei erstellen.
Per Mildner

7
"fsutil sparse setflag temp.txt" setzt das Sparse-Flag und macht es zu einer Sparse-Datei. "fsutil sparse setrange temp.txt 0 1024" legt den Bereich der Spärlichkeit fest :)
Coldblackice

Gibt es einen Weg ohne Administratorrechte?
Wizlog

3
@ ZXX erstellt fsutil file createnewkeine spärlichen Dateien: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

Sie können das Sysinternals Contig- Tool verwenden. Es hat einen -nSchalter, der eine neue Datei einer bestimmten Größe erstellt. Im Gegensatz fsutildazu sind keine Administratorrechte erforderlich.


2
Beeindruckend! Sehr schnell herunterzuladen und auszuführen. Die Zeile, die ich verwendet habe, ist m: \ contig -n M: \ SpaceBuffer.tmp 5368709120
Leigh Riffel

6
Möchten Sie nur überprüfen, ob es sich um eine Datei mit geringer Dichte handelt oder ob die Datei tatsächlich Daten enthält?
Slolife

2
Es ist keine spärliche Datei (soweit ich weiß) und die Datei ist leer.
Joey

1
Ich bin hier verwirrt ... wenn es augenblicklich ist und es sich nicht um eine Datei mit geringer Dichte handelt, wie verbraucht es dann tatsächlich Speicherplatz?
Jason S

2
@JasonS: Geht contigeffektiv zum letzten Byte und schreibt dort eine einzelne 0(schauen Sie einfach mit Process Monitor). Windows füllt dann den Rest mit Nullen. Dies ist wahrscheinlich so effizient wie es mit nicht spärlichen Dateien möglich ist, und die Erstellung einer Datei mit einer Größe von etwa 5 GiB dauert selbst auf meiner Festplatte nur wenige Sekunden. Ich denke damals habe ich entweder auf einer SSD oder mit kleineren Dateien versucht. Aber es ist ziemlich schnell (und definitiv schneller, als alle Bytes der leeren Datei selbst zu schreiben.
Joey

23

Ich suchte nach einer Möglichkeit, große Dateien mit Daten zu generieren, nicht nur mit spärlichen Dateien. Kam über die folgende Technik :

Wenn Sie eine Datei mit realen Daten erstellen möchten, können Sie das folgende Befehlszeilenskript verwenden.

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

(Führen Sie die beiden oben genannten Befehle nacheinander aus, oder fügen Sie sie einer Batchdatei hinzu.)

Mit den obigen Befehlen wird innerhalb weniger Sekunden eine 1-MB-Datei dummy.txt erstellt ...


6
Auszug aus dem obigen Link: Wenn Sie eine Datei mit realen Daten erstellen möchten, können Sie das folgende Befehlszeilenskript verwenden. 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 (Führen Sie die beiden oben genannten Befehle nacheinander aus, oder Sie können sie einer Batchdatei hinzufügen.) Mit den obigen Befehlen wird innerhalb weniger Sekunden eine 1-MB-Datei dummy.txt erstellt.
Tony Stark

Achtung: Sie müssen zuerst die erste Zeile kopieren, die Eingabetaste drücken und dann die zweite Zeile kopieren. Ich habe versucht, das gesamte Skript in meine Shell zu kopieren, aber dann ist nichts passiert.
Magiranu

15

Schauen Sie sich RDFC http://www.bertel.de/software/rdfc/index-en.html an

RDFC ist wahrscheinlich nicht der schnellste, weist jedoch Datenblöcke zu. Die absolut schnellsten müssten eine API auf niedrigerer Ebene verwenden, um nur Clusterketten zu erhalten und diese in MFT zu stellen, ohne Daten zu schreiben.

Beachten Sie, dass es hier keine Silberkugel gibt - wenn "Schöpfung" sofort zurückkehrt, bedeutet dies, dass Sie eine spärliche Datei haben, die nur eine große Datei fälscht, aber Sie werden keine Datenblöcke / -ketten erhalten, bis Sie in sie schreiben. Wenn du nur liest, bekommst du sehr schnelle Nullen, was dich glauben lassen könnte, dass dein Laufwerk plötzlich unglaublich schnell wurde :-)


Dies scheint die beste Antwort zu sein. FSUTIL erstellt eine Sparse-Datei, die in vielen Fällen kein gültiges Testszenario darstellt. Sysinternals contig scheint für mich nie zu funktionieren. Wenn ich einen Befehl wie "contig -n largefile.bin 6000000000" verwende, wird eine Datei mit einer Größe von 1,7 GB erstellt ... ??? Vielen Dank für RDFC, da es beim ersten Versuch und Schreiben perfekt funktioniert hat die maximale Schreibgeschwindigkeit meiner ATA-Festplatte.
Syclone0044

Wie oben erwähnt, erstellt FSUTIL "createnew" KEINE Dateien mit geringer Dichte, sondern weist der angeforderten Datei (in der MFT) nur den angeforderten Speicherplatz zu, dh den gesamten Speicherplatz. Wenn Sie dann die Eigenschaften der Datei überprüfen, ist die zugewiesene Größe (ärgerlicherweise als "Größe auf der Festplatte" bezeichnet, wie sie auf jedem Gerät sein kann, das nicht unbedingt eine "Festplatte" ist) ähnlich oder sehr nahe an der tatsächlichen Größe. Eine wirklich spärliche Datei, die vollständig mit Nullen gefüllt ist, hätte eine sehr kleine zugewiesene Größe. Das einzige Tool, das ich gefunden habe, um eine nicht spärliche Datei in eine spärliche Datei umzuwandeln (und tatsächlich ihre Größe zu reduzieren, nicht nur zu kennzeichnen), ist SparseTest.
GabrielB

13

Überprüfen Sie die Windows Server 2003 Resource Kit-Tools . Es gibt ein Dienstprogramm namens Creatfil.

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

Es ähnelt mkfile unter Solaris.


1
Ich möchte das Resource Kit lieber nicht herunterladen müssen.
Leigh Riffel

Sie würden nur die 1 exe aus dem Resource Kit benötigen, Sie müssen nicht das ganze auf Ihrem Produktionssystem haben.
Byron Whitlock

1
Ich werde es versuchen, aber ich möchte lieber nicht die zusätzliche Dateiabhängigkeit haben.
Leigh Riffel

Die Datei wird für mich derzeit nicht richtig heruntergeladen, aber ich kann mir nicht vorstellen, dass sie schneller ist als das von Johannes Rossel erwähnte Contig-Tool.
Leigh Riffel

1
Vielen Dank! Das heruntergeladene Paket ist rktools.exe und es ist 11,7 MB und 18,2 MB, wenn es erweitert wird. Oh, und das ist "creatfil.exe" und nicht "createfil.exe". Diese Datei hat eine Größe von 5,5 KB und das ist alles, was Sie wirklich brauchen. Ich habe weniger als 1 Minute gebraucht, um eine 1-GB-Datei auf einer Quad-Core-Intel-CPU mit 3,0 GHz zu generieren. Mit dem oben beschriebenen Tool fsutil.exe dauert die Erstellung nur einen Bruchteil einer Sekunde. Es ist also wahr, dass dieses Tool spärliche Dateien erstellt. Es ist noch größer, es ist 73,5 KB. Dieser ist besser zum Generieren großer Dateien zu Testzwecken.
Samir

11

Ich brauchte eine reguläre 10-GB-Datei zum Testen, konnte sie also nicht verwenden, fsutilda sie spärliche Dateien erstellt (danke @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

Ich wollte eine 10-GB-Datei erstellen, aber aus irgendeinem Grund wurde sie nur als 4-GB-Datei angezeigt. Deshalb wollte ich sicher sein und bei 4 GB anhalten. Wenn Sie wirklich sicher sein möchten, dass Ihre Datei vom Betriebssystem und anderen Anwendungen ordnungsgemäß verarbeitet wird, beenden Sie die Erweiterung auf 1 GB.


Sie müssen ein einzelnes Prozentzeichen verwenden, nicht das Doppelte. Außerdem benötigen Sie keine zusätzlichen Leerzeichen in Klammern. Ich werde das für dich bearbeiten.
Samir

Welches Betriebssystem hast du hier verwendet, Kumpel? Das rmist ein Unix / Linux-Befehl, während deles ein DOS / Windows-Befehl ist? ...
Samir

Soll dies eine Batch-Datei sein oder sollen Sie diese Befehle direkt in cmd ausgeben? Ein einzelnes Prozentzeichen wird in cmd verwendet, wie %iin einer Batchdatei, Sie verwenden jedoch ein doppeltes Prozentzeichen wie %%i.
Samir

@Sammy: Es beginnt mit @echo off, also ist es offensichtlich ein .bat. Deshalb hatte es doppelte Prozentzeichen.
f.ardelian

Okay, dann möchten wir vielleicht das doppelte Prozentzeichen zurückbringen. Warum löschen file-4gb.txtSie, bevor Sie es erstellen? Würde das nicht zu einem Fehler führen? Wollten Sie eigentlich in file-4gb.txtdieser Zeile erstellen ? Oder die alte file-big.txtDatei umbenennen ? Dies ist selbst für eine Batch-Datei unklar. Wenn Sie es umbenennen wollten, ist der gesuchte Befehl wahrscheinlich ren. Wie ren file-big.txt file-4gb.txt. Ich denke, Sie haben das mit verwechselt rm.
Samir

7

Öffnen Sie den Windows Task-Manager, suchen Sie den größten Prozess, den Sie ausgeführt haben, und klicken Sie auf Create dump file.

Dadurch wird eine Datei relativ zur Größe des Prozesses im Speicher in Ihrem temporären Ordner erstellt.

Sie können problemlos eine Datei mit einer Größe von Gigabyte erstellen.

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein


2
schöne Lösung! Hilfreich, wenn Sie eine Vielzahl von Anwendungen
Don Cheadle

6

Ohne eine vollständige Anwendung zu schreiben, können wir Python-Leute Dateien jeder Größe mit vier Zeilen und demselben Snippet unter Windows und Linux erstellen (die os.stat()Zeile ist nur eine Überprüfung):

>>> 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
Die Installation von Python zur Lösung eines Problems ist wirklich übertrieben. Verwenden Sie einfach etwas Integriertes wie Powershell oder C # - gist.github.com/nadams810/6539070 (Sie benötigen nicht einmal Visual Studio, um C # -Anwendungen zu kompilieren).
Natalie Adams

1
.Net, C # und Powershell sind nicht unbedingt plattformübergreifend.
Gimel

1
Sie sind in Windows integriert, was das OP verlangt (vorausgesetzt, Ihr System ist vollständig auf dem neuesten Stand).
Natalie Adams

@NatalieAdams Diese Antwort ist jedoch sehr hilfreich, wenn Sie Python bereits zur Lösung anderer Probleme installiert haben. :)
Criptych steht mit Monica

6

PowerShell-Einzeiler zum Erstellen einer Datei C:\Tempzum Ausfüllen von Datenträger C: Nur 10 MB verbleiben:

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

3
Wird eine Datei mit echtem Inhalt oder einer Datei mit geringer Dichte erstellt?
Samselvaprabu

6

Verwenden:

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

Was ist int? Funktioniert dies für eine 5-GB-Datei? Ist dies auf 2 oder 4 GB begrenzt? Dass der dritte Parameter SetFilePointer()0 ist, deutet darauf hin, dass er für eine 5-GB-Datei nicht funktioniert.
Peter Mortensen

4

Ich habe kürzlich nach einer Möglichkeit gesucht, eine große Dummy-Datei mit Speicherplatzzuweisung zu erstellen. Alle Lösungen sehen umständlich aus. Schließlich habe ich gerade das DISKPARTDienstprogramm in Windows gestartet (eingebettet seit Windows Vista):

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

Wobei MAXIMUM die resultierende Dateigröße ist, hier 20 GB.


Beste Lösung bisher.
Frank FYC

Funktioniert bei mir nicht Leider wird keine Datei erstellt. Ich habe es mit Administratorrechten versucht.
Magiranu

4

Ich habe ein hervorragendes Dienstprogramm gefunden, das unter https://github.com/acch/genfiles konfiguriert werden kann .

Es füllt die Zieldatei mit zufälligen Daten, so dass es keine Probleme mit spärlichen Dateien gibt, und für meine Zwecke (Testen von Komprimierungsalgorithmen) gibt es ein gutes Maß an weißem Rauschen.


Dieses Dienstprogramm ist eine Java-Anwendung mit einer einzelnen Datei, die auf jeder Plattform mit Java funktionieren sollte.
Paul

@MusikPolice - Link ist tot
dcp

Notiert. Leider muss das nach sechs Jahren passieren.
MusikPolice

3

Zeitarbeitsdateien sollten im Windows-Zeitarbeitsordner gespeichert werden. Basierend auf der Antwort von Rod können Sie den folgenden Liner verwenden, um eine temporäre 5-GB-Datei zu erstellen, die den Dateinamen zurückgibt

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

Erläuterung:

  • [System.IO.Path]::GetTempFileName() generiert einen zufälligen Dateinamen mit zufälliger Erweiterung im Windows Temp-Ordner
  • Die Pipeline wird verwendet, um den Namen zu übergeben, an [System.IO.File]::Create($_)den die Datei erstellt wird
  • Der Dateiname wird auf die neu erstellte Datei mit gesetzt .SetLength(5gb). Ich war etwas überrascht zu entdecken, dass PowerShell die Byte-Konvertierung unterstützt , was sehr hilfreich ist.
  • Das Dateihandle muss geschlossen werden .close, damit andere Anwendungen darauf zugreifen können
  • Mit wird ;$_der Dateiname zurückgegeben und | ? { $_ }damit wird sichergestellt, dass nur der Dateiname und nicht die leere Zeichenfolge zurückgegeben wird[System.IO.File]::Create($_)

3

Der einfachste Weg, den ich gefunden habe, ist dieses kostenlose Dienstprogramm: http://www.mynikko.com/dummy/

Erstellt Dummy-Dateien beliebiger Größe, die entweder mit Leerzeichen oder mit nicht komprimierbarem Inhalt gefüllt sind (nach Ihrer Wahl). Hier ist ein Screenshot:

Geben Sie hier die Bildbeschreibung ein


3

Plain ol 'C ... dies wird unter MinGW GCC unter Windows XX erstellt und sollte auf jeder' generischen 'C-Plattform funktionieren.

Es wird eine Nulldatei mit einer bestimmten Größe generiert. Die resultierende Datei ist NICHT nur ein Verzeichnis-Space-Occupier-Eintrag und belegt tatsächlich die angegebene Anzahl von Bytes. Dies ist schnell, da außer dem vor dem Schließen geschriebenen Byte keine tatsächlichen Schreibvorgänge stattfinden.

Meine Instanz erzeugt eine Datei voller Nullen - dies kann je nach Plattform variieren. Dieses Programm richtet im Wesentlichen die Verzeichnisstruktur für alle Daten ein, die sich in der Nähe befinden.

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

Ich empfehle Ihnen zu überprüfen, wie ich Ihren Code formatiert habe. Und übrigens. Die Frage hat bereits eine sehr gute Antwort, und das fseek + fwrite wurde bereits in Pyton und WinAPI vorgestellt, sodass dies keine große Hilfe ist. Es ist schön, aber Sie haben ein vollständiges Beispiel geliefert. +1 dafür. Aber versuchen Sie, bereits gelöste Fragen nicht erneut zu beantworten, es ist nur Zeitverschwendung, in der Sie jemandem ein bisschen mehr helfen könnten :)
quetzalcoatl

2

Ich habe eine Lösung mit DEBUG unter http://www.scribd.com/doc/445750/Create-a-Huge-File gefunden , aber ich kenne keine einfache Möglichkeit, sie zu skripten, und sie scheint nicht in der Lage zu sein um Dateien zu erstellen, die größer als 1 GB sind.


1
Kannst du nicht 5 Dateien erstellen und sie dann anhängen? Erstellen Sie sie gleichzeitig mit Threading und
hängen

Ich weiß nicht, ob ich es ohne Programmieren einfädeln könnte, aber ja, ich kann die Datei einige Male kopieren, um die benötigte Größe zu erhalten. In meinem Fall muss die Datei selbst nicht 5 GB groß sein, sondern nur der verbrauchte Speicherplatz.
Leigh Riffel

2
Das Schreiben in mehrere Dateien mithilfe von Threading klingt angesichts der langsamen Festplatten wie eine schreckliche Idee ... Außerdem ist das Anhängen dieser Dateien zeitlich ziemlich teuer, sodass die "schnellen" Kriterien wahrscheinlich nicht erfüllt werden.
Joey


2

Sie können den Befehl cat Powershell verwenden.

Erstellen Sie zunächst eine einfache Textdatei mit wenigen Zeichen. Je mehr Anfangszeichen Sie eingeben, desto schneller wird es größer. Nennen wir es out.txt. Dann in Powershell:

cat out.txt >> out.txt

Warten Sie, bis die Datei groß genug ist. Drücken Sie dann Strg-C, um es zu beenden.


1

Sie können diesen C ++ - Code ausprobieren:

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

Je nach CPU-Geschwindigkeit dauert das Generieren möglicherweise einige Zeit ...


Das Plakat fragte schnell. Dies würde die Installation eines C ++ - Compilers erfordern.

1

Einfache Antwort in Python: Wenn Sie eine große echte Textdatei erstellen müssen, habe ich nur eine einfache whileSchleife verwendet und konnte in etwa 20 Sekunden eine 5-GB-Datei erstellen. Ich weiß, dass es grob ist, aber es ist schnell genug.

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

Schnell auszuführen oder schnell auf einer Tastatur zu tippen? Wenn Sie Python unter Windows verwenden, können Sie Folgendes versuchen:

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

0

Eine weitere GUI-Lösung: WinHex.

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

Im Gegensatz zu einigen der bereits vorgeschlagenen Lösungen werden die (leeren) Daten tatsächlich auf das Gerät geschrieben.

Sie können die neue Datei auch mit einem auswählbaren Muster oder zufälligen Daten füllen:

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

-1

Ich habe einige Ergänzungen zu derselben fsutilMethode vorgenommen, die in der gewählten Antwort erwähnt wurde. Hiermit werden Dateien mit vielen verschiedenen Erweiterungen und / oder verschiedenen Größen erstellt.

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

Der Code kann von https://github.com/iamakidilam/bulkFileCreater.git geklont werden

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.