Testing Files Generator
Nederlands

Hoe maak je een bestand van een exacte grootte

Elk systeem heeft er een opdracht voor, en alle drie staan hieronder. Ze geven je een bestand met precies het juiste aantal bytes - en voor veel tests is dat alles wat je nodig hebt. Elke opdracht op deze pagina is uitgevoerd vóór publicatie, op het systeem waartoe hij behoort.

Het korte antwoord

Windows: fsutil file createnew name 10485760. Linux: dd if=/dev/zero of=name bs=1M count=10. macOS: mkfile 10m name. Groottes zijn in bytes, en 10 MB geteld zoals je bestandsbeheer telt is 10485760.

Windows

fsutil, en een PowerShell-versie die niets extra's nodig heeft

fsutil wordt met Windows meegeleverd. Het neemt de grootte in bytes, reken het getal dus eerst uit - 10 MB is 10485760, 100 MB is 104857600, 1 GB is 1073741824.

fsutil file createnew test10mb.bin 10485760

Gemeten op Windows 11: het werkt vanaf een gewone prompt en heeft geen verhoogde nodig, en het bestand komt uit op precies 10485760 bytes.

PowerShell kan hetzelfde zonder een ander programma aan te roepen, en begrijpt eenheden:

$file = New-Object System.IO.FileStream "test10mb.bin", Create, ReadWrite
$file.SetLength(10MB)
$file.Close()

10MB betekent in PowerShell 10485760 bytes, dezelfde telling op basis van 1024 die Verkenner gebruikt, dus de twee opdrachten hierboven geven dezelfde grootte.

Linux

dd, truncate en fallocate, en het verschil dat mensen te pakken neemt

dd is degene die iedereen kent. Het schrijft de bytes echt:

dd if=/dev/zero of=test10mb.bin bs=1M count=10

truncate is direct klaar, en dat is de adder onder het gras. Gemeten op Alpine Linux meldt het bestand 10485760 bytes en neemt het nul blokken in beslag - het is een sparse bestand. Alles wat het leest krijgt tien megabyte aan nullen, maar de schijf heeft de ruimte nooit afgestaan:

truncate -s 10M test10mb.bin

Dat is prima om een uploadlimiet te testen en misleidend om een schijfquotum te testen. fallocate is degene waar je naar grijpt als de ruimte echt moet zijn:

fallocate -l 10M test10mb.bin

En als de inhoud onsamendrukbaar moet zijn, zodat een archiefprogramma hem niet weer kan verkleinen:

head -c 10485760 /dev/urandom > test10mb.bin

macOS

mkfile, dat niet sparse is, en de twee die je al kent

macOS levert mkfile mee. Gemeten op macOS 26.6.2: 10485760 bytes en 20480 blokken, dus de ruimte is echt toegewezen in plaats van beloofd:

mkfile 10m test10mb.bin

dd en truncate zijn er ook en gedragen zich zoals op Linux:

dd if=/dev/zero of=test10mb.bin bs=1m count=10
truncate -s 10M test10mb.bin

Waar dit ophoudt te werken

Een bestand van de juiste grootte is geen bestand van het juiste soort

Alles hierboven geeft je een blok nullen. Dat is genoeg als wat getest wordt alleen naar de grootte kijkt - een uploadlimiet, een quotum, een overdracht. Het is niet meer genoeg zodra iets het bestand opent.

Gemeten, en het is de moeite waard om het zelf te doen: maak een bestand van 2 MB met fsutil, noem het photo.png en geef het aan een afbeeldingsbibliotheek. Pillow antwoordt cannot identify image file. Het is geen PNG. Dat is het ook nooit geweest - alleen de naam zei het.

Dat doet er meer toe dan het klinkt, vanwege de kant waarop de test dan faalt. Je upload-endpoint weigert het bestand, je test wordt groen en je concludeert dat de groottelimiet werkt. Het weigerde het niet vanwege de grootte. Het weigerde het omdat de bytes geen afbeelding waren, en de regel die je wilde testen is nooit bereikt.

De andere weg

Een echt bestand van dat formaat, in precies de grootte die je vroeg

Dit is wat Testing Files Generator doet. Het bestand is een echt bestand van zijn formaat - het opent in het programma waartoe het behoort - en het heeft het exacte aantal bytes dat je vroeg, tot op de byte:

tfg generate --format png --size 10mb --out ./fixtures

Vraag een grootte die een formaat niet kan halen en je krijgt een fout die de ondergrens en de reden noemt, nooit een bestand van de verkeerde grootte. De pagina met formaten toont elk formaat met het kleinste bestand dat het kan maken.

En een limiet is drie testgevallen in plaats van één, dus de tool bouwt ze alle drie:

tfg generate --format pdf --boundary 10mb --out ./edges

Dat geeft je 10485759, 10485760 en 10485761 bytes, en een manifest dat zegt welke je systeem moet accepteren en welke het moet weigeren. De pagina met toepassingen loopt dat en vier andere taken door waarvoor het is gebouwd.

Gratis en open source, GPL-3.0. Geen account nodig. De downloads voor Windows en macOS zijn ondertekend en starten zonder waarschuwing.

Dus wat moet je gebruiken?

Beide staan op deze pagina omdat beide soms goed zijn. De fout die je moet vermijden is de eerste gebruiken waar de tweede nodig is en de groene test als bewijs lezen.