Come creare un file di dimensione esatta
Ogni sistema ha un comando per farlo, e tutti e tre sono qui sotto. Ti danno un file con esattamente il numero giusto di byte - e per molti test è tutto ciò che serve. Ogni comando di questa pagina è stato eseguito prima della pubblicazione, sul sistema a cui appartiene.
La risposta breve
Windows: fsutil file createnew name 10485760. Linux: dd if=/dev/zero of=name
bs=1M count=10. macOS: mkfile 10m name. Le dimensioni sono in byte, e 10 MB
contati come li conta il tuo file manager sono 10485760.
Windows
fsutil, e una versione PowerShell che non richiede nulla di extra
fsutil è incluso in Windows. Prende la dimensione in byte, quindi
calcola prima il numero - 10 MB sono 10485760, 100 MB sono 104857600, 1 GB è 1073741824.
fsutil file createnew test10mb.bin 10485760
Misurato su Windows 11: funziona da un prompt normale senza richiederne uno con privilegi elevati, e il file esce di esattamente 10485760 byte.
PowerShell può fare lo stesso senza chiamare un altro programma, e capisce le unità:
$file = New-Object System.IO.FileStream "test10mb.bin", Create, ReadWrite
$file.SetLength(10MB)
$file.Close()
10MB in PowerShell significa 10485760 byte, lo stesso conteggio in base 1024 che usa
Esplora risorse, quindi i due comandi qui sopra producono la stessa dimensione.
Linux
dd, truncate e fallocate, e la differenza che frega le persone
dd è quello che conoscono tutti. Scrive davvero i byte:
dd if=/dev/zero of=test10mb.bin bs=1M count=10
truncate è istantaneo, ed è questa la trappola. Misurato su Alpine Linux, il file
riporta 10485760 byte e occupa zero blocchi - è un file
sparso. Qualsiasi cosa lo legga ottiene dieci megabyte di zeri, ma il disco non ha mai
ceduto lo spazio:
truncate -s 10M test10mb.bin
Va bene per testare un limite di upload ed è fuorviante per testare una quota di disco.
fallocate è quello da usare quando lo spazio deve essere reale:
fallocate -l 10M test10mb.bin
E quando il contenuto deve essere incomprimibile, così un archiviatore non può ridurlo di nuovo:
head -c 10485760 /dev/urandom > test10mb.bin
macOS
mkfile, che non è sparso, e i due che conosci già
macOS include mkfile. Misurato su macOS 26.6.2: 10485760 byte e 20480 blocchi, quindi
lo spazio è davvero allocato invece che promesso:
mkfile 10m test10mb.bin
Ci sono anche dd e truncate, e si comportano come su Linux:
dd if=/dev/zero of=test10mb.bin bs=1m count=10
truncate -s 10M test10mb.bin
Dove questo smette di funzionare
Un file della dimensione giusta non è un file del tipo giusto
Tutto quanto sopra ti dà un blocco di zeri. Basta quando ciò che è sotto test guarda solo la dimensione - un limite di upload, una quota, un trasferimento. Smette di bastare nel momento in cui qualcosa apre il file.
Misurato, e vale la pena provarlo di persona: crea un file da 2 MB con fsutil, chiamalo
photo.png e passalo a una libreria di immagini. Pillow risponde cannot
identify image file. Non è un PNG. Non lo è mai stato - lo diceva solo il nome.
Conta più di quanto sembri, per via di come il test fallisce a quel punto. Il tuo endpoint di upload rifiuta il file, il tuo test diventa verde e concludi che il limite di dimensione funziona. Non lo ha rifiutato per la dimensione. Lo ha rifiutato perché i byte non erano un'immagine, e la regola che volevi testare non è mai stata raggiunta.
- un parser lo rifiuta prima che venga guardata qualsiasi regola di dimensione
- un passaggio di miniatura fallisce e l'errore che leggi riguarda la miniatura
- un antivirus o un controllo del contenuto lo rifiuta per un terzo motivo
- un visualizzatore non mostra nulla, e nessuno sa dire se sia quello il bug
L'altra strada
Un file reale di quel formato, della dimensione esatta che hai chiesto
È ciò che fa Testing Files Generator. Il file è un vero file del suo formato - si apre nel programma che gli appartiene - e ha l'esatto numero di byte che hai chiesto, al byte:
tfg generate --format png --size 10mb --out ./fixtures
Chiedi una dimensione che un formato non può raggiungere e ottieni un errore che nomina il minimo e il suo motivo, mai un file della dimensione sbagliata. La pagina dei formati elenca ogni formato con il file più piccolo che può produrre.
E un limite sono tre casi di test anziché uno, quindi lo strumento li costruisce tutti e tre:
tfg generate --format pdf --boundary 10mb --out ./edges
Ti dà 10485759, 10485760 e 10485761 byte, e un manifest che dice quali il tuo sistema deve accettare e quali rifiutare. La pagina dei casi d'uso ripercorre questo e altri quattro compiti per cui è pensato.
Gratuito e open source, GPL-3.0. Nessuna registrazione. I download per Windows e macOS sono firmati e si avviano senza avvisi.
Quindi, quale usare?
-
Usa il comando di sistema
Quando nulla apre il file. Testare un limite di dimensione su un endpoint che controlla prima la dimensione, un trasferimento, una quota, un disco pieno. È una riga ed è già installato.
-
Usa un generatore vero
Quando qualcosa analizza, renderizza, importa o estrae il file - e quando ti servono le stesse fixture domani, su un'altra macchina, byte per byte.
Entrambi sono su questa pagina perché entrambi hanno ragione una parte del tempo. L'errore da evitare è usare il primo dove serve il secondo e leggere il test verde come una prova.