Comment créer un fichier d'une taille exacte
Chaque système a une commande pour cela, et les trois sont ci-dessous. Elles donnent un fichier du nombre d'octets exact - et pour beaucoup de tests, c'est tout ce qu'il faut. Chaque commande de cette page a été exécutée avant publication, sur le système auquel elle appartient.
La réponse courte
Windows : fsutil file createnew name 10485760. Linux : dd if=/dev/zero
of=name bs=1M count=10. macOS : mkfile 10m name. Les tailles sont en
octets, et 10 Mo comptés comme les compte votre gestionnaire de fichiers font 10485760 octets.
Windows
fsutil, et une version PowerShell qui n'a besoin de rien de plus
fsutil est fourni avec Windows. Il prend la taille en octets, calculez
donc le nombre d'abord - 10 Mo font 10485760, 100 Mo font 104857600, 1 Go fait 1073741824.
fsutil file createnew test10mb.bin 10485760
Mesuré sous Windows 11 : cela fonctionne depuis une invite ordinaire sans exiger de droits élevés, et le fichier fait exactement 10485760 octets.
PowerShell sait faire la même chose sans appeler un autre programme, et il comprend les unités :
$file = New-Object System.IO.FileStream "test10mb.bin", Create, ReadWrite
$file.SetLength(10MB)
$file.Close()
10MB en PowerShell signifie 10485760 octets, le même comptage par 1024 qu'utilise
l'Explorateur, donc les deux commandes ci-dessus produisent la même taille.
Linux
dd, truncate et fallocate, et la différence qui piège les gens
dd est celle que tout le monde connaît. Elle écrit vraiment les octets :
dd if=/dev/zero of=test10mb.bin bs=1M count=10
truncate est instantané, et c'est là le piège. Mesuré sous Alpine Linux, le fichier
annonce 10485760 octets et occupe zéro bloc - c'est un fichier
creux. Tout ce qui le lit obtient dix mégaoctets de zéros, mais le disque n'a jamais
cédé la place :
truncate -s 10M test10mb.bin
C'est correct pour tester une limite d'envoi et trompeur pour tester un quota de disque.
fallocate est celui à choisir quand l'espace doit être réel :
fallocate -l 10M test10mb.bin
Et quand le contenu doit être incompressible, pour qu'un archiveur ne puisse pas le réduire à nouveau :
head -c 10485760 /dev/urandom > test10mb.bin
macOS
mkfile, qui n'est pas creux, et les deux que vous connaissez déjà
macOS fournit mkfile. Mesuré sous macOS 26.6.2 : 10485760 octets et 20480 blocs,
donc l'espace est réellement alloué plutôt que promis :
mkfile 10m test10mb.bin
dd et truncate sont là aussi et se comportent comme sous Linux :
dd if=/dev/zero of=test10mb.bin bs=1m count=10
truncate -s 10M test10mb.bin
Là où cela cesse de suffire
Un fichier de la bonne taille n'est pas un fichier du bon type
Tout ce qui précède donne un bloc de zéros. C'est suffisant quand ce qui est testé ne regarde que la taille - une limite d'envoi, un quota, un transfert. Cela cesse de l'être dès que quelque chose ouvre le fichier.
Mesuré, et cela vaut la peine de le faire vous-même : créez un fichier de 2 Mo avec
fsutil, appelez-le photo.png et donnez-le à une bibliothèque d'images.
Pillow répond cannot identify image file. Ce n'est pas un PNG. Cela n'en a jamais
été un - seul le nom le prétendait.
Cela compte plus qu'il n'y paraît, à cause de la façon dont le test échoue ensuite. Votre point d'envoi refuse le fichier, votre test passe au vert et vous concluez que la limite de taille fonctionne. Il ne l'a pas refusé pour sa taille. Il l'a refusé parce que les octets n'étaient pas une image, et la règle que vous vouliez tester n'a jamais été atteinte.
- un analyseur le refuse avant qu'aucune règle de taille ne soit examinée
- une étape de miniature échoue et l'erreur que vous lisez concerne la miniature
- un antivirus ou un contrôle de contenu le refuse pour une troisième raison
- une visionneuse n'affiche rien, et personne ne peut dire si c'est le bogue
L'autre voie
Un vrai fichier de ce format, à la taille exacte que vous avez demandée
C'est ce que fait Testing Files Generator. Le fichier est un vrai fichier de son format - il s'ouvre dans le logiciel qui lui correspond - et il fait le nombre d'octets exact que vous avez demandé, à l'octet près :
tfg generate --format png --size 10mb --out ./fixtures
Demandez une taille qu'un format ne peut pas atteindre et vous obtenez une erreur qui nomme le plancher et sa raison, jamais un fichier de mauvaise taille. La page des formats liste chaque format avec le plus petit fichier qu'il peut produire.
Et une limite, ce sont trois cas de test et non un, donc l'outil construit les trois :
tfg generate --format pdf --boundary 10mb --out ./edges
Cela donne 10485759, 10485760 et 10485761 octets, et un manifeste qui dit lesquels votre système doit accepter et lesquels il doit refuser. La page des cas d'usage passe en revue cela et quatre autres tâches pour lesquelles il est conçu.
Gratuit et open source, GPL-3.0. Aucune inscription. Les téléchargements Windows et macOS sont signés et démarrent sans avertissement.
Alors lequel utiliser ?
-
Utiliser la commande du système
Quand rien n'ouvre le fichier. Tester une limite de taille sur un point d'entrée qui vérifie d'abord la taille, un transfert, un quota, un disque plein. C'est une ligne et c'est déjà installé.
-
Utiliser un vrai générateur
Quand quoi que ce soit analyse, affiche, importe ou extrait le fichier - et quand vous avez besoin des mêmes fixtures demain, sur une autre machine, à l'octet près.
Les deux sont sur cette page parce que les deux sont justes une partie du temps. L'erreur à éviter est d'utiliser la première là où il faut la seconde et de lire le test vert comme une preuve.