Jak vytvořit soubor přesné velikosti
Každý systém na to má příkaz a všechny tři jsou níže. Dají vám soubor s přesně správným počtem bajtů - a pro mnoho testů je to vše, co potřebujete. Každý příkaz na této stránce byl před zveřejněním spuštěn na systému, kam patří.
Krátká odpověď
Windows: fsutil file createnew name 10485760. Linux: dd if=/dev/zero of=name
bs=1M count=10. macOS: mkfile 10m name. Velikosti jsou v bajtech a 10 MB
počítané tak, jak je počítá váš správce souborů, je 10485760.
Windows
fsutil a verze v PowerShellu, která nepotřebuje nic navíc
fsutil je součástí Windows. Bere velikost v bajtech, takže si číslo
nejdřív spočítejte - 10 MB je 10485760, 100 MB je 104857600, 1 GB je 1073741824.
fsutil file createnew test10mb.bin 10485760
Změřeno na Windows 11: funguje z běžného příkazového řádku a nepotřebuje zvýšená oprávnění a soubor vyjde přesně na 10485760 bajtů.
PowerShell umí totéž bez volání jiného programu a rozumí jednotkám:
$file = New-Object System.IO.FileStream "test10mb.bin", Create, ReadWrite
$file.SetLength(10MB)
$file.Close()
10MB v PowerShellu znamená 10485760 bajtů, tedy stejné počítání po 1024 jako
Průzkumník, takže oba příkazy výše vytvoří stejnou velikost.
Linux
dd, truncate a fallocate a rozdíl, který lidi chytí
dd zná každý. Bajty skutečně zapisuje:
dd if=/dev/zero of=test10mb.bin bs=1M count=10
truncate je okamžitý, a to je ten háček. Změřeno na Alpine Linuxu: soubor hlásí
10485760 bajtů a zabírá nula bloků - je to řídký soubor.
Cokoli, co ho čte, dostane deset megabajtů nul, ale disk místo nikdy neuvolnil:
truncate -s 10M test10mb.bin
To stačí k testu limitu nahrávání a klame to při testu diskové kvóty. fallocate je ten
správný, když musí být místo skutečné:
fallocate -l 10M test10mb.bin
A když musí být obsah nestlačitelný, aby ho archivátor nemohl znovu zmenšit:
head -c 10485760 /dev/urandom > test10mb.bin
macOS
mkfile, který není řídký, a dva, které už znáte
macOS dodává mkfile. Změřeno na macOS 26.6.2: 10485760 bajtů a 20480 bloků, takže místo
je skutečně přiděleno, ne jen slíbeno:
mkfile 10m test10mb.bin
dd a truncate tam jsou také a chovají se jako na Linuxu:
dd if=/dev/zero of=test10mb.bin bs=1m count=10
truncate -s 10M test10mb.bin
Kde to přestává stačit
Soubor správné velikosti není soubor správného druhu
Vše výše vám dá blok nul. To stačí, když testovaná věc hledí jen na velikost - limit nahrávání, kvótu, přenos. Přestane to stačit ve chvíli, kdy soubor cokoli otevře.
Změřeno a stojí za to to zkusit samostatně: vytvořte pomocí fsutil soubor o 2 MB,
pojmenujte ho photo.png a předejte ho knihovně pro obrázky. Pillow odpoví
cannot identify image file. Není to PNG. Nikdy nebylo - tvrdil to jen název.
To je důležitější, než to zní, kvůli tomu, jakým směrem test pak selže. Váš endpoint pro nahrávání soubor odmítne, váš test zezelená a vy usoudíte, že limit velikosti funguje. Neodmítl ho kvůli velikosti. Odmítl ho proto, že bajty nebyly obrázek, a pravidlo, které jste chtěli otestovat, nebylo nikdy dosaženo.
- parser ho odmítne dřív, než se podívá na jakékoli pravidlo velikosti
- selže krok náhledu a chyba, kterou čtete, je o náhledu
- antivirus nebo kontrola obsahu ho odmítne z třetího důvodu
- prohlížeč nezobrazí nic a nikdo nepozná, zda je to ta chyba
Druhá cesta
Skutečný soubor toho formátu, v přesně té velikosti, o kterou jste požádali
To je to, co dělá Testing Files Generator. Soubor je pravý soubor svého formátu - otevře se v programu, kam patří - a má přesný počet bajtů, o který jste požádali, na bajt:
tfg generate --format png --size 10mb --out ./fixtures
Požádejte o velikost, které formát nedosáhne, a dostanete chybu, která pojmenuje minimum a jeho důvod, nikdy soubor špatné velikosti. Stránka formátů uvádí každý formát s nejmenším souborem, který umí vytvořit.
A limit jsou tři testovací případy, ne jeden, takže nástroj sestaví všechny tři:
tfg generate --format pdf --boundary 10mb --out ./edges
To vám dá 10485759, 10485760 a 10485761 bajtů a manifest, který říká, které má váš systém přijmout a které odmítnout. Stránka případů použití to probírá spolu se čtyřmi dalšími úlohami, pro které je určen.
Zdarma a open source, GPL-3.0. Žádná registrace. Stažené soubory pro Windows a macOS jsou podepsané a spustí se bez varování.
Tak který použít?
-
Použijte příkaz systému
Když soubor nic neotevírá. Test limitu velikosti na endpointu, který kontroluje velikost jako první, přenos, kvóta, plný disk. Je to jeden řádek a už je nainstalovaný.
-
Použijte skutečný generátor
Když soubor cokoli zpracovává, vykresluje, importuje nebo rozbaluje - a když zítra na jiném počítači potřebujete stejné fixtures, bajt po bajtu.
Oba jsou na této stránce, protože oba mají část času pravdu. Chybou, které je třeba se vyhnout, je použít první tam, kde je třeba druhý, a číst zelený test jako důkaz.