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


Réponses:


399
fsutil file createnew <filename> <length>

<length>est en octets.

fsutil nécessite cependant des privilèges administratifs.


6
@ZXX +1 Pour mes besoins, j'avais simplement besoin du système de fichiers pour voir l'espace comme indisponible, mais vos informations sont utiles si quelqu'un d'autre en a besoin.
Leigh Riffel

22
fsutil file createnew ne crée pas de fichier fragmenté .
Per Mildner

7
"fsutil sparse setflag temp.txt" définit l'indicateur clairsemé, ce qui en fait un fichier clairsemé. "fsutil sparse setrange temp.txt 0 1024" définit la plage de rareté :)
Coldblackice

existe-t-il un moyen sans privilèges d'administrateur?
wizlog

3
@ZXX fsutil file createnewne crée PAS de fichiers clairsemés: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

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


2
Hou la la! Téléchargement et exécution très rapides. La ligne que j'ai utilisée est m: \ contig -n M: \ SpaceBuffer.tmp 5368709120
Leigh Riffel

6
Je veux juste vérifier s'il s'agit d'un fichier clairsemé ou le fichier contient-il réellement des données?
slolife

2
Ce n'est pas un fichier clairsemé (pour autant que je sache) et le fichier est vide.
Joey

1
Je suis confus ici ... s'il est instantané et que ce n'est pas un fichier clairsemé, alors comment utilise-t-il réellement l'espace disque?
Jason S

2
@JasonS: contigva effectivement au dernier octet et écrit un seul 0là (il suffit de regarder avec Process Monitor). Windows remplit ensuite le reste de zéros. C'est probablement aussi efficace que possible avec des fichiers non clairsemés et la création d'un fichier d'environ 5 Gio ne prend que quelques secondes, même sur mon disque dur. Je suppose qu'à l'époque, j'ai essayé soit sur un SSD ou avec des fichiers plus petits. Mais c'est plutôt rapide (et certainement plus rapide que d'écrire vous-même tous les octets du fichier vide.
Joey

23

Je cherchais un moyen de générer de gros fichiers avec des données, pas seulement des fichiers clairsemés. Je suis tombé sur 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 ...


6
Extrait du lien ci-dessus: 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.
Tony Stark

Attention: vous devez d'abord copier la première ligne, appuyer sur Entrée et ensuite copier la deuxième ligne. J'ai essayé de copier tout le script dans mon shell, mais rien ne s'est passé.
Magiranu

15

Consultez 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. Le plus rapide devrait utiliser une API de niveau inférieur pour obtenir simplement des chaînes de cluster et les mettre dans MFT sans écrire de données.

Attention, il n'y a pas de solution miracle ici - si la "création" revient instantanément, cela signifie que vous avez un fichier clairsemé qui ne fait que truquer un gros fichier, mais vous n'obtiendrez pas de blocs / chaînes de données jusqu'à ce que vous y écriviez. Si vous venez de lire, vous obtiendrez des zéros très rapides, ce qui pourrait vous faire croire que votre lecteur est soudainement devenu extrêmement rapide :-)


Cela semble être la meilleure réponse. FSUTIL crée un fichier clairsemé qui n'est pas un scénario de test valide dans de nombreux cas. Sysinternals contig ne semble jamais fonctionner pour moi, lorsque j'utilise une commande comme "contig -n largefile.bin 6000000000, il crée un fichier de 1,7 Go ... ??? Merci pour RDFC car il a parfaitement fonctionné du premier coup et écrit à la vitesse d'écriture maximale de mon disque ATA
Syclone0044

Comme cela a été dit ci-dessus, FSUTIL «createnew» ne crée PAS de fichiers épars, il alloue simplement (dans la MFT) l'espace demandé au fichier demandé, c'est-à-dire l'espace complet. Si vous vérifiez ensuite les propriétés du fichier, la taille allouée (nommée de façon ennuyeuse «taille sur le disque», comme elle peut l'être sur n'importe quel appareil qui n'est pas nécessairement un «disque») est similaire ou très proche de la taille réelle. Un vrai fichier clairsemé totalement rempli de zéros aurait une très petite taille allouée. Le seul outil que j'ai trouvé qui peut transformer un fichier non clairsemé en un fichier clairsemé (et en fait réduire sa taille, pas seulement le signaler) est SparseTest.
GabrielB

13

Vérifiez les 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

Il est similaire à mkfile sur Solaris.


1
Je préfère ne pas avoir à télécharger le kit de ressources.
Leigh Riffel le

vous n'auriez besoin que du 1 exe du kit de ressources, vous n'avez pas besoin d'avoir le tout sur votre système de production.
Byron Whitlock

1
Je vais essayer, mais je préfère ne pas avoir la dépendance de fichier supplémentaire.
Leigh Riffel le

Le fichier ne se télécharge pas correctement pour moi maintenant, mais je ne peux pas imaginer qu'il soit plus rapide que l'outil Contig mentionné par Johannes Rossel.
Leigh Riffel

1
Merci! Le package téléchargé est rktools.exe et il est de 11,7 Mo et 18,2 Mo lorsqu'il est développé. Oh, et c'est "creatfil.exe" et non "createfil.exe". Ce fichier à lui seul fait 5,5 Ko et c'est tout ce dont vous avez vraiment besoin. Il m'a fallu moins d'une minute pour générer un fichier de 1 Go sur un processeur Intel quad core 3.0 GHz. Avec l'outil fsutil.exe comme indiqué ci-dessus, il ne prend qu'une fraction de seconde pour le créer. Il est donc vrai que cet outil crée des fichiers clairsemés. C'est encore plus gros, c'est 73,5 Ko. Celui-ci est préférable pour générer des fichiers volumineux à des fins de test.
Samir

11

J'avais besoin d'un fichier régulier de 10 Go pour les tests, donc je ne pouvais pas l'utiliser fsutilcar il crée des fichiers clairsemé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 n'apparaissait que comme 4 Go, donc je voulais être en sécurité et arrêté à 4 Go. Si vous voulez vraiment être sûr que votre fichier sera géré correctement par le système d'exploitation et d'autres applications, arrêtez de l'étendre à 1 Go.


Vous devez utiliser un seul caractère de pourcentage, pas le double. De plus, vous n'avez pas besoin des espaces supplémentaires entre parenthèses. Je vais éditer ça pour vous.
Samir

Quel système d'exploitation avez-vous utilisé ici mate? Le rmest un système Unix / Linux commande, tout en delest une commande / DOS sous Windows ...?
Samir

Est-ce censé être un fichier batch ou êtes-vous censé émettre ces commandes directement en cmd? Le signe de pourcentage unique est utilisé dans cmd, comme %imais dans un fichier de commandes, vous utilisez le signe de pourcentage double, comme %%i.
Samir

@Sammy: Cela commence par @echo off, donc c'est évidemment un .bat. C'est pourquoi il avait des signes de double pourcentage.
f.ardelian

D'accord, alors nous pourrions vouloir ramener le signe du double pour cent. Pourquoi supprimez-vous file-4gb.txtavant de le créer? Cela n'entraînerait-il pas une erreur? Vouliez-vous réellement créer file-4gb.txtsur cette ligne? Ou renommer l'ancien file-big.txtfichier? Ce n'est pas clair, même pour un fichier de commandes. Si vous vouliez le renommer, alors la commande que vous cherchiez est probablement ren. Comme ren file-big.txt file-4gb.txt. Je pense que vous l'avez confondu avec rm.
Samir

7

Ouvrez le Gestionnaire des tâches de Windows, trouvez le plus gros processus que vous avez exécuté, cliquez avec le bouton droit et cliquez sur Create dump file.

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

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

Entrez la description de l'image ici

Entrez la description de l'image ici


2
belle solution! Utile si vous avez une variété d'applications en cours d'exécution, pour obtenir différentes tailles
Don Cheadle

6

À moins d'écrire une application complète, nous, les gars de Python, pouvons obtenir des fichiers de n'importe quelle taille avec quatre lignes, le même extrait sur Windows et Linux (la os.stat()ligne 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
>>>

1
Installer Python pour résoudre un problème est vraiment exagéré. Pourquoi ne pas simplement utiliser quelque chose de intégré comme Powershell ou C # - gist.github.com/nadams810/6539070 (vous n'avez même pas besoin de Visual Studio pour compiler des applications C #).
Natalie Adams

1
.Net, C # et Powershell ne sont pas nécessairement multi-plateformes.
gimel

1
Ils sont intégrés à Windows, ce que l'OP a demandé (en supposant que votre système soit entièrement à jour).
Natalie Adams

@NatalieAdams Mais cette réponse est très utile si vous avez déjà installé Python pour résoudre d'autres problèmes. :)
criptych se tient avec Monica

6

PowerShell one-liner pour créer un fichier C:\Temppour 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

3
créera-t-il un fichier avec un contenu réel ou un fichier clairsemé?
Samselvaprabu

6

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

Qu'est-ce que c'est int? Est-ce que cela fonctionnera pour un fichier de 5 Go? Est-ce limité à 2 ou 4 Go? Le fait que le troisième paramètre à SetFilePointer()0 indique qu'il ne fonctionnera pas pour un fichier de 5 Go.
Peter Mortensen

4

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

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

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


Jusqu'à présent, la meilleure solution.
Frank FYC

Ça ne marche pas pour moi. Aucun fichier n'est malheureusement créé. J'ai essayé avec des privilèges d'administrateur.
Magiranu

4

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 clairsemés et pour mes besoins (test des algorithmes de compression), il donne un bon niveau de bruit blanc.


Cet utilitaire est une application Java à fichier unique qui devrait fonctionner sur n'importe quelle plate-forme avec Java.
Paul

@MusikPolice - Le lien est mort
dcp

C'est noté. Malheureusement, cela arrivera forcément après six ans.
MusikPolice

3

Les fichiers temporaires doivent être stockés dans le dossier temporaire Windows. Sur la base de la réponse de Rod, vous pouvez utiliser la doublure suivante pour créer un fichier temporaire de 5 Go qui renvoie le nom de 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 de Windows
  • Le Pipeline est utilisé pour transmettre le nom [System.IO.File]::Create($_)auquel 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 la conversion d'octets , ce qui est vraiment utile.
  • Le descripteur de fichier doit être fermé avec .closepour permettre à d'autres applications d'y accéder
  • Avec ;$_le nom de fichier est retourné et avec | ? { $_ }il est garanti que seul le nom de fichier est retourné et non la chaîne vide retournée par[System.IO.File]::Create($_)

3

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 remplis de contenu non compressible (votre choix). Voici une capture d'écran:

entrez la description de l'image ici


3

Plain ol 'C ... cela se construit sous MinGW GCC sur Windows XX et devrait fonctionner sur n'importe quelle plate-forme C "générique".

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

Mon instance produit un fichier plein de zéros - cela peut varier selon la plateforme; ce programme configure essentiellement la structure de répertoires pour toutes les données qui traînent.

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

Je vous suggère de vérifier comment j'ai formaté votre code. Et BTW. la question a déjà une très bonne réponse, et le fseek + fwrite a déjà été présenté dans Pyton et WinAPI donc ce n'est pas d'une grande aide. C'est bien mais vous avez fourni un exemple complet. +1 pour cela. Mais essayez de ne pas répondre à nouveau aux questions déjà résolues, c'est juste une perte de temps dans laquelle vous pourriez aider quelqu'un un peu plus :)
quetzalcoatl

2

J'ai trouvé une solution en utilisant DEBUG sur http://www.scribd.com/doc/445750/Create-a-Huge-File , mais je ne connais pas de moyen facile de l'écrire et il ne semble pas pouvoir pour créer des fichiers de plus de 1 Go.


1
ne pouvez-vous pas créer 5 fichiers puis les ajouter? Créez-les simultanément en utilisant le filetage, puis ajoutez-les: D
dassouki

Je ne sais pas si je pourrais l'enfiler sans faire de programmation, mais oui, je peux copier le fichier plusieurs fois pour obtenir la taille dont j'ai besoin. Dans mon cas, je n'ai pas besoin que le fichier lui-même soit de 5 Go, juste l'espace utilisé.
Leigh Riffel

2
Écrire dans plusieurs fichiers en utilisant le filetage semble une idée terrible, étant donné la lenteur des disques durs ... De plus, les ajouter est assez coûteux en temps, ce qui fait probablement échouer les critères "rapides".
Joey


2

Vous pouvez utiliser la commande cat powershell.

Créez d'abord un fichier texte simple avec quelques caractères. Plus vous saisissez de caractères initiaux, plus il s'agrandit rapidement. Appelons-le out.txt. Puis à Powershell:

cat out.txt >> out.txt

Attendez aussi longtemps que nécessaire pour rendre le fichier suffisamment volumineux. Appuyez ensuite sur ctrl-c pour y mettre fin.


1

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

Il faudra peut-être un certain temps pour générer en fonction de la vitesse de votre CPU ...


L'affiche a demandé rapidement. Cela nécessiterait l'installation d'un compilateur C ++.

1

Réponse simple en Python: Si vous avez besoin de créer un gros fichier texte réel, je viens d'utiliser une whileboucle simple et j'ai pu créer un fichier de 5 Go en environ 20 secondes. Je sais que c'est brut, 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()

0

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

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 en fait les données (vides) sur l'appareil.

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)

-1

J'ai fait quelques ajouts à la même fsutilméthode que celle mentionnée dans la réponse choisie. Il s'agit de créer des fichiers de nombreuses extensions différentes et / ou de différentes tailles.

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

Le code peut être cloné depuis https://github.com/iamakidilam/bulkFileCreater.git

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.