web-dev-qa-db-fra.com

Créer rapidement un fichier volumineux sur un système Windows

Dans la même veine que Créez rapidement un fichier volumineux sur un système Linux, J'aimerais créer rapidement un fichier volumineux sur un système Windows. En gros, je pense à 5 Go. Le contenu n'a pas d'importance. Une commande intégrée ou un fichier de traitement par lots court serait préférable, mais j'accepterai une application s'il n'y a pas d'autres moyens simples.

224
Leigh Riffel
fsutil file createnew <filename> <length>

<length> est en octets.

fsutil nécessite cependant des privilèges d'administrateur.

364
Patrick Cuff

Vous pouvez utiliser l'outil Sysinternals Contig . Il possède un commutateur -n qui crée un nouveau fichier d'une taille donnée. Contrairement à fsutil, il ne nécessite pas de privilèges d'administrateur.

34
Joey

Je cherchais un moyen de générer des fichiers volumineux contenant des données, pas seulement des fichiers fragmentés. Entré dans la technique ci-dessous :

Si vous souhaitez créer un fichier avec des données réelles, vous pouvez utiliser le script de ligne de commande ci-dessous.

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

(Exécutez les deux commandes ci-dessus l'une après l'autre ou vous pouvez les ajouter à un fichier de commandes.)

Les commandes ci-dessus créent un fichier dummy.txt de 1 Mo en quelques secondes ...

23
Giri

Découvrez RDFC http://www.bertel.de/software/rdfc/index-en.html

RDFC n'est probablement pas le plus rapide, mais il alloue des blocs de données. Les plus rapides devraient utiliser des API de niveau inférieur pour obtenir simplement des chaînes de grappes et les placer dans MFT sans écrire de données.

Attention, il n’ya pas de solution miracle ici: si «création» revient instantanément, cela signifie que vous avez un fichier fragmenté qui simule un fichier volumineux, mais vous n’obtiendrez pas de blocs/chaînes de données tant que vous n’y avez pas écrit. Si vous venez de lire, vous obtiendrez des zéros très rapides, ce qui pourrait vous faire croire que votre lecteur est devenu tout à coup extrêmement rapide :-)

15
ZXX

Vérifiez le Outils du Kit de ressources Windows Server 2003 . Il existe un utilitaire appelé Creatfil.

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

C'est semblable à mkfile sur Solaris.

13
Byron Whitlock

J'avais besoin d'un fichier standard de 10 Go pour les tests. Je ne pouvais donc pas utiliser fsutil car cela créait des fichiers fragmentés (merci @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

Je voulais créer un fichier de 10 Go, mais pour une raison quelconque, il ne représentait que 4 Go. Je voulais donc être en sécurité et arrêté à 4 Go. Si vous voulez vraiment être sûr que votre fichier sera traité correctement par le système d'exploitation et d'autres applications, arrêtez de le développer à 1 Go.

11
f.ardelian

Utilisation:

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

Ouvrez le Gestionnaire de tâches Windows, recherchez le processus le plus volumineux que vous exécutez en cliquant avec le bouton droit de la souris et cliquez sur Create dump file.

Cela créera un fichier par rapport à la taille du processus en mémoire dans votre dossier temporaire.

Vous pouvez facilement créer un fichier de la taille en gigaoctets.

 Enter image description here

 Enter image description here

5
shenku

PowerShell one-liner pour créer un fichier dans C:\Temp afin de remplir le disque C: ne laissant que 10 Mo:

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

J'ai trouvé un excellent utilitaire configurable sur https://github.com/acch/genfiles .

Il remplit le fichier cible avec des données aléatoires, il n'y a donc aucun problème avec les fichiers fragmentés, et pour mes besoins (test des algorithmes de compression), il donne un niveau de bruit blanc agréable.

4
MusikPolice

Plain ol 'C ... ceci est construit sous MinGW GCC sous Windows XX et devrait fonctionner Sur n'importe quelle plate-forme C' générique '.

Il génère un fichier null d'une taille spécifiée. Le fichier résultant N'EST PAS simplement une entrée d'occupant de répertoire, et occupe en fait le nombre d'octets spécifié. Ceci est rapide car aucune écriture réelle ne se produit sauf pour l'octet écrit avant la fermeture.

Mon instance produit un fichier plein de zéros - cela peut varier en fonction de la plate-forme. Ce programme configure essentiellement la structure de répertoires pour toutes les données qui restent en suspens

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

Je recherchais récemment un moyen de créer un fichier factice volumineux avec une allocation d'espace. Toutes les solutions semblent maladroites. Enfin, je viens de démarrer l'utilitaire DISKPART sous Windows (intégré depuis Windows Vista):

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

MAXIMUMest la taille du fichier résultant, 20 Go ici.

3
chersun

À court d’écriture d’une application complète, nous, les gars de Python, pouvons obtenir des fichiers de toute taille avec quatre lignes, le même extrait sous Windows et Linux (la ligne os.stat() n’est qu’un contrôle):

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

J'ai trouvé une solution en utilisant DEBUG à http://www.scribd.com/doc/445750/Create-a-Huge-File , mais je ne connais pas un moyen simple de le scripter et cela ne fonctionne semblent pouvoir créer des fichiers de plus de 1 Go.

2
Leigh Riffel

Les fichiers temporaires doivent être stockés dans le dossier Windows Temp. En fonction de la réponse de Rod vous pouvez utiliser le liner suivant pour créer un fichier temporaire de 5 Go qui renvoie le nom du fichier.

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

Explication:

  • [System.IO.Path]::GetTempFileName() génère un nom de fichier aléatoire avec une extension aléatoire dans le dossier temporaire Windows
  • Le Pipeline est utilisé pour passer le nom à [System.IO.File]::Create($_) qui crée le fichier.
  • Le nom de fichier est défini sur le fichier nouvellement créé avec .SetLength(5gb). J'ai été un peu surpris de découvrir que PowerShell prend en charge Byte Conversion , ce qui est très utile.
  • Le descripteur de fichier doit être fermé avec .close pour permettre à d'autres applications d'y accéder.
  • Avec ;$_, le nom du fichier est renvoyé et avec | ? { $_ }, il est garanti que seul le nom du fichier est renvoyé et non la chaîne vide renvoyée par [System.IO.File]::Create($_).
2
Florian Feldhaus

... 1 Mo fichier dummy.txt en quelques secondes. 

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

Voir ici: http://www.windows-commandline.com/how-to-create-large-dummy-file/

2
CKuharski

Réponse simple en Python: Si vous devez créer un fichier texte réel volumineux, je viens d'utiliser une simple boucle while et j'ai pu créer un fichier de 5 Go en 20 secondes environ. Je sais que c'est brutal, mais c'est assez rapide.

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

Le moyen le plus simple que j'ai trouvé est cet utilitaire gratuit: http://www.mynikko.com/dummy/

Crée des fichiers factices de taille arbitraire qui sont remplis d'espaces ou de contenu non compressible (votre choix). Voici une capture d'écran:

 enter image description here

1
yosh m

Vous pouvez essayer ce code 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);
        }
    }

Cela prendra peut-être du temps à générer en fonction de la vitesse de votre processeur ...

1
NEt_Bomber

Une autre solution graphique: WinHex.

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

Contrairement à certaines des solutions déjà proposées, il écrit les données (vides) sur le périphérique.

Il permet également de remplir le nouveau fichier avec un motif sélectionnable ou des données aléatoires:

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

Rapide à exécuter ou rapide à taper sur un clavier? Si vous utilisez Python sous Windows, vous pouvez essayer ceci:

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