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.
- een parser weigert het voordat een groottegrens wordt bekeken
- een miniatuurstap faalt en de fout die je leest gaat over het miniatuur
- een virusscanner of inhoudscontrole weigert het om een derde reden
- een viewer toont niets, en niemand kan zeggen of dat de bug is
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?
-
Gebruik de systeemopdracht
Als niets het bestand opent. Een groottelimiet testen op een endpoint dat eerst de grootte controleert, een overdracht, een quotum, een volle schijf. Het is één regel en het is al geïnstalleerd.
-
Gebruik een echte generator
Als iets het bestand parset, rendert, importeert of uitpakt - en als je morgen op een andere machine dezelfde fixtures nodig hebt, byte voor byte.
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.