I managed to get the multi-level nesting of .Zip files to work.
One problem I had was a file that was marked as Encrypted for some reason and was throwing an exception because no password was supplied.
1) I doubt it should have been marked as encrypted since it was an .rc file of just 47 bytes
2) I don't think an entry should throw an exception just because the encryption method is either not supported or no password was supplied - that should be deferred until the user actually tries to read it. And maybe have a flag on the header that says whether the entry is accessible or not.
I also found some simple optimization tweaks - for example RewindableStream doesn't need to create a new MemoryStream on each reset, SetLength(0) will do.
Also, since the Seek is now important, it can reuse a field byte[] rather than create one each time.
152,240 files in 16,972 folders over 103 zip files nested to 3 levels deep now takes 15.1s for archive or 12.3 for forward only streaming.
One problem I had was a file that was marked as Encrypted for some reason and was throwing an exception because no password was supplied.
1) I doubt it should have been marked as encrypted since it was an .rc file of just 47 bytes
2) I don't think an entry should throw an exception just because the encryption method is either not supported or no password was supplied - that should be deferred until the user actually tries to read it. And maybe have a flag on the header that says whether the entry is accessible or not.
I also found some simple optimization tweaks - for example RewindableStream doesn't need to create a new MemoryStream on each reset, SetLength(0) will do.
Also, since the Seek is now important, it can reuse a field byte[] rather than create one each time.
152,240 files in 16,972 folders over 103 zip files nested to 3 levels deep now takes 15.1s for archive or 12.3 for forward only streaming.