in reply to BinPack Algorithm Use To Pack Files In a DVD
As I previously mentioned, files take up more space than their file size.
+----+----+----+----+----+ | |XXXX|XXXX|XX**| | +----+----+----+----+----+ | | = Disk block XX = File ** = Wasted space
You need to round up file sizes to the next multiple of a block size.
use POSIX qw( ceil ); $filesize = ceil($filesize / BLOCK_SIZE) * BLOCK_SIZE;
Directories also take up space, but I have no idea how much. Unless you plan on having lots of directories, the simplest solution might be to lower DVD_CAP by a bit. I have no idea what's reasonable, but 64k is probably not a bad start.
# Space for directories. No idea what's reasonable. use constant DIR_BUF => 64*1024; use constant DVD_CAP => 4707319808 - DIR_BUF;
|
|---|