The system we use in our games at Krome is quite complex, but blindingly fast, which is important for console games running from DVD.

The data archive contains the files in access order. That is, the files are sorted to make sure the seek time is kept to an absolute minimum. If the game loads fileA, fileC then fileB, then that is the order in which they exist in the archive. We also have what we call binary packages. If a level loads fileA, fileB and fileC, then those files are grouped together into a binary package. This binary package is loaded into memory in one file read and then handed out to the bits of the game that asked for them. If a different loads fileD, fileE and fileB, then it has its own binary package in which fileB is duplicated so that we can still load the entire package in one file read into memory. There are other features, such as per-file compression, CRC checks, CRC filenames (access a file by the CRC of its filename instead of by the filename. Finding a file in the archive is then just a matter of comparing numbers instead of comparing strings), file overrides (a second archive can override files contained in the first archive), and much more.