I am developing a binary file format to store my game's assets and I am thinking about how to implement the "file table". One option to would be to create a structure for file entries like this: struct Entry { uint16_t nameLength; //< This basically stores the whole path e.g "dir1/file1.txt" char* name; uint64_t dataSize; uint64_t dataOffset; }; Or i could use a method, which I think is more elegant and is based off the ISO 9660 filesystem, however I think it may have a performance impact on traversing the file tree. struct Entry { uint16_t entrySize; //< This is used for going to the next entry (next = current + current.entrySize) uint8_t entryType; //< 0 for file, 1 for directory + may be extended later uint16_t nameLength; //< Now this only stores the concrete file/directory name char* name; uint64_t dataSize; uint64_t dataOffset; Entry* children; //< Actually an array where entrySize is used for iterating // and the last entry is a "null entry" which has entrySize = 0 }; So which one of theese will be better considering that the resource files are "read only" and cannot be modified, only created again? Or is there a solution better tailored for virtual filesystems? Because in the first case the system only needs to traverse all the entries lloking for "dir1/file1.txt", but in the second case it will have to first search for "dir1" in the root entry, and the for "file1.txt". I hope that I was clean enough.