This is a little bit less fancy, but avoids lazy IO. It depends a little bit more on FilePath, but that also allows for a more general interface.
We also had to lock the FileOperation type to DTInfoZipper so we can examine symlinks and other stuff, without re-reading all the information.